[英]Filtering dictionary based on first key in a tuple key (key1, key2), where 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.