关于这个问题,我需要您的建议。
我已在以下两个列表中收集了我需要的东西:simpl2
,astik
,其代码如下:
simpl2 = []
astik = []
for path, subdirs, files in os.walk(rootfolder):
for name in files:
if 'sim2.shp' == name:
simpl2.append(os.path.join(path, name))
elif 'ASTIK.shp' == name:
astik.append(os.path.join(path, name))
以上代码在包含文件夹的根文件夹中进行搜索:v1.v2,v3,v4
所以用这个:
for i,j in zip(simpl2,astik):
print(i,j)
给出以下内容:
内容
C:\Users\user\Desktop\pl\v1\exported\sim2.shp C:\Users\user\Desktop\pl\v1\ASTIK\ASTIK.shp
C:\Users\user\Desktop\pl\v2\exported\sim2.shp C:\Users\user\Desktop\pl\v4\ASTIK\ASTIK.shp
问题
如何确保这些对来自同一文件夹(例如,第一行既来自v1
,又来自同一文件夹,例如第二行,其中一对来自v2
, v4
中的其他字符)使它们根本没有一对。
之所以会发生这种情况,是因为它们将在以后使用,并且必须是正确的配对,否则对于没有配对的用户,我已经准备好了带有例外的代码,因此问题在于如何修复所描述的这一部分较早。
说明
根文件夹为:
C:\Users\user\Desktop\pl
在pl
之后有一个v1,v2,v3,v4文件夹。这些文件夹中的每个都有一些与所有4个文件夹相同的文件。唯一的区别是有些将是空的。我只想检查列表中是否创建了正确的v
对。
答案 0 :(得分:1)
好吧,看到您的更新,也许您对这样的事情感兴趣:
import os
simpl2 = []
astik = []
rootfolder = r'C:\Users\user\Desktop\pl'
subfolders = [os.path.join(rootfolder, i) for i in ['v1','v2','v3','v4']]
for folder in subfolders:
temp = {name: os.path.join(path, name)
for path, subdirs, files in os.walk(folder)
for name in files
if name in ['sim2.shp', 'ASTIK.shp']}
if len(temp) == 2:
simpl2.append(temp['sim2.shp'])
astik.append(temp['ASTIK.shp'])
旧代码
但是... ,如果这是您的最终目标,则也可以存储路径。如果两个文件都在路径中,则您知道该路径包含两个文件。然后,您可以在需要时使用os.path.join()轻松构建结束路径。
paths = []
for path, subdirs, files in os.walk(rootfolder):
if ('sim2.shp' in files) and ('ASTIK.shp' in files):
paths.append(path)
或更紧凑的格式:
lookfor = ['sim2.shp','ASTIK.shp']
paths = [p for p,s,f in os.walk(rootfolder) if all(i in f for i in lookfor)]