Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查zip中的配对是否正确?_Python_List - Fatal编程技术网

Python 检查zip中的配对是否正确?

Python 检查zip中的配对是否正确?,python,list,Python,List,我需要你对这个问题的建议 我已经在这两个列表中收集了我需要的东西:simple2,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 'AS

我需要你对这个问题的建议

我已经在这两个列表中收集了我需要的东西:
simple2
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

然后是一个v1、v2、v3、v4文件夹。每个文件夹都有一些与所有4个文件夹相同的文件。唯一的区别是有些文件将是空的。我只想检查列表中是否创建了正确的相同的
v

好的,看看你的更新,也许你对其他内容感兴趣像这样:

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)]

这些文件不在同一子文件夹中。如果您可以在问题的“内容”下看到,则应通过[-3]搜索这些文件例如,
v1
的位置。虽然
v1
既有
sim2
又有
ASTIK
,但您的第一段代码没有存储任何内容。您能解释一下吗?Thanks@user10319541这的确很奇怪。但请尝试在你的问题中用一个简单的例子来详细说明在哪里可以找到这些文件。请在下面的“内容”,其中列出了要查看的文件。检查应由[-3]完成路径的位置。在每个文件夹中的
v
v1、v2、v3、v4的位置都是所有正在调查的文件的子文件夹。@user10319541好的,我现在明白了。您如何先将所有子文件夹存储到一个数组中。然后循环所有这些子文件夹并在项目中找到您的子文件夹?我添加了一些详细信息最后部分对问题进行了进一步的澄清。