有没有办法循环处理具有相似名称的字典中的文件?

时间:2019-07-24 07:47:18

标签: python-3.x dictionary

所以,我想知道是否可以在循环中使用字典中名称相似的文件

我有这个字典:

dcm = {}
for filename in os.listdir('./GMATfiles'):
    if fnmatch.fnmatch(filename,'DCM_hydra*.txt'):
       dcm[filename[:11]] = os.path.normpath(''.join(['./GMATfiles', '/', filename]))
       #print(dcm)

#OUT_INPUT
out={}
for filename in os.listdir('./GMATfiles'):
    if fnmatch.fnmatch(filename,'Out_hydra*.txt'):
       out[filename[:11]] = os.path.normpath(''.join(['./GMATfiles', '/', filename]))
       #print(out) 
#MATRIX_INPUT 
mtr={}
for filename in os.listdir('./GMATfiles'):
    if fnmatch.fnmatch(filename,'matrizr_hydra*.txt'):
       mtr[filename[:15]] = os.path.normpath(''.join(['./GMATfiles', '/', filename]))
       #print(mtr)

我从这些词典中的每一个那里得到的名字都是一样的,除了一个数字  (例如:DCM_hydra01, DCM_hydra02, DCM_hydra03等)

然后我需要在某些功能中使用字典中的这些文件:

IFOV1= gi.IFOV_generic(out['Out_hydra01'],mtr['matrizr_hydra01'], dcm['DCM_hydra01'],endpoint)
IFOV2= gi.IFOV_generic(out['Out_hydra02'],mtr['matrizr_hydra02'], dcm['DCM_hydra02'],endpoint)
.
.
.

有没有一种方法可以编写循环,而无需逐个编写这些 IFOV 函数?

1 个答案:

答案 0 :(得分:0)

您可以尝试通过zip()函数遍历字典,例如下面的示例。它为您列出了所有文件的所有功能。但是不要忘记,所有格言中的len应该相等

dcm = {'f1': 'path_to_file'}
out = {'f1': 'path_to_file'}
mtr = {'f1': 'path_to_file'}

IFOV = []

for d, o, m in zip(dcm, out, mtr):
    IFOV.append(
        gi.IFOV_generic(out[o], mtr[m], dcm[d], endpoint)
    )