我有一个像这样的主文件夹:
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))
答案 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)
您可能想要的是类似的东西(我假设mainf
和mainfo
基本相同,但其中一个为空)
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))
)。