簡體   English   中英

將最后一個等式標記后的字符串與嵌套字典中的key1匹配

[英]Matching the string after the last equation mark to key1 in a nested dictionary

我正在嘗試將目錄名附加到文件名中,以基於字典選擇文件類型和相機型號。

這些文件以以下模式存儲在目錄中。 目錄名稱始終以=標記結尾,后跟key1

0001=d5                             #d5 is an ID for the camera model
 DSCN001                            #dir name needs to be appended to filenames below
    [media files]
0002=blahblahblah=alpha9            #alpha9 is an ID for the camera model
  SONYDATA                             
    STREAM001                       #dir name needs to be appended to filenams below
      [media files]    

下面的代碼識別了指定攝像機型號並與字典表中的key1匹配的目錄的最后2個字符。 對於alpha9它不起作用,因為alpha9的長度超過2個字符。

:如何更改代碼,所以它可以識別目錄名稱中最后一個等式 =標記之后的任何字符串,並將其與key1匹配?

碼:

config = {
    'd5': {},
    'alpha9': {},
}
config['d5']['append_dir_to_file'] = 1
config['d5']['append_dir_for'] = ('nef', 'NEF', 'jpg', 'JPG')
config['alpha9']['append_dir_to_file'] = 1
config['alpha9']['append_dir_for'] = ('mp4', 'MP4')

folder_keys = config.keys()
target = os.getcwd() 

def sb_travel(dirs, flag=False, target=False, k=False):
    for p1 in dirs:
        if not flag and p1[-2:] in folder_keys:
            main =  next(os.walk("%s/%s"%(target,p1)))[1]
            sb_travel(main, True, "%s/%s"%(target,p1), p1[-2:])
        if flag:
            dirslist = next(os.walk("%s/%s"%(target,p1)))
            main =  dirslist[1] 
            if config[k]['append_dir_to_file']: 
                for f in dirslist[2]: 
                    ext = f.split('.')[1] if len(f.split('.')) > 1 else False
                    if ext and ext in config[k]['append_dir_for']:
                        old_file = "%s/%s/%s"%(target,p1,f)        
                        new_file = "%s/%s/%s_%s"% (target,p1,p1,f) 
                        os.rename(old_file, new_file)              
            sb_travel(main, True, "%s/%s"%(target,p1),k)    
if not os.path.exists(target):
    print ("Invalid Directory Location")
main =  next(os.walk(target))[1]
sb_travel(main, False, target) 

只需在p1.split('=')[-1] in folder_keys

如果沒有方程式標記,它將與整個字符串匹配,因此您可能要先'=' in p1使用'=' in p1進行檢查

編輯:給定輸入dirs = ['0001=d5', '0002=alpha9']我的代碼:

for p1 in dirs:
    print(p1.split('=')[-1])

給出輸出:

d5
alpha9

這是您最初要求的。 我不會幫您調試腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM