循环使用功能中不同文件夹中的文件吗?

时间:2018-11-18 17:25:21

标签: python loops

我有一个像这样的主文件夹:

mainf/01/streets/streets.shp
mainf/02/streets/streets.shp    #normal files
mainf/03/streets/streets.shp
...

和另一个这样的主文件夹:

mainfo/01/streets/streets.shp
mainfo/02/streets/streets.shp   #empty files
mainfo/03/streets/streets.shp
...

我想使用一个函数,该函数将从上层文件夹中的第一个普通文件(普通文件)作为第一个参数,将另一个文件夹中的第一个普通文件(空文件)作为第二个参数。 基于[-3]级文件夹编号(例如01、02、03等)

具有功能的示例:

appendfunc(first_file_from_normal_files,first_file_from_empty_files)

如何循环执行此操作?

我的代码:

for i in mainf and j in mainfo:
    appendfunc(i,j) 

更新 正确的版本:

first = ["mainf/01/streets/streets.shp", "mainf/02/streets/streets.shp", "mainf/03/streets/streets.shp"]
second = ["mainfo/01/streets/streets.shp", "mainfo/02/streets/streets.shp", "mainfo/03/streets/streets.shp"]

final = [(f,s) for f,s in zip(first,second)]

for i , j in final:
    appendfunc(i,j)

自动将具有完整路径的主文件夹中的所有文件放入列表的替代方法?

first= []
for (dirpath, dirnames, filenames) in walk(mainf):
    first.append(os.path.join(dirpath,dirnames,filenames))
second = []
for (dirpath, dirnames, filenames) in walk(mainfo):
    second.append(os.path.join(dirpath,dirnames,filenames))

2 个答案:

答案 0 :(得分:0)

使用zip

first = ["mainf/01/streets/streets.shp", "mainf/02/streets/streets.shp", "mainf/03/streets/streets.shp"]
second = ["mainf/01/streets/streets.shp", "mainf/02/streets/streets.shp", "mainf/03/streets/streets.shp"]

final = [(f,s) for f,s in zip(first,second)]
print(final)

答案 1 :(得分:0)

您不能使用for ... and循环。您可以在一个语句中循环一个可迭代,而在另一语句中循环另一个。这仍然无法满足您的需求:

for i in mainf:
    for j in mainfo:
        appendfunc(i,j) 

您可能想要的是类似的东西(我假设mainfmainfo基本相同,但其中一个为空)

for folder_num in range(len(mainf)):
    appendfunc(mainf[folder_num], mainfo[folder_num])

您还没有说appendfunc应该做什么,所以我将其留给您。我还假设,根据您访问文件的方式,您可以弄清楚如何修改对mainf[folder_num]mainfo[folder_num]的调用(例如,您可能需要注入数字以某种方式返回目录结构(mainf/{}/streets/streets.shp".format(zero_padded(folder_num)))。