gpt4 book ai didi

python - 压缩两个具有相同文件名的列表中的项目?

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:32 25 4
gpt4 key购买 nike

我有两个列表:这个:

list1(有更多的项目)

['C:\\Users\\user\\Desktop\\prog1\\merge\\AST\\AST.shp',
'C:\\Users\\user\\Desktop\\prog1\\merge\\ASTI\\ASTI.shp',
'C:\\Users\\user\\Desktop\\prog1\\merge\\ASTO\\ASTO.shp']

还有这个:

list2(有更多的项目)

['C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp',
'C:\\Users\\user\\Desktop\\programs\\merge\\ASTI\\ASTI.shp',
'C:\\Users\\user\\Desktop\\programs\\merge\\AWE\\AWE.shp', #THIS IS EXTRA
'C:\\Users\\user\\Desktop\\programs\\merge\\ASTO\\ASTO.shp']

如何确保配对与压缩后另一个列表中相应的相同名称相匹配?

也许我们与他们之前的文件夹匹配?喜欢:

if list1[0].split('\\')[-2] == list2[0].split('\\')[-2]:
final = [(f,s) for f,s in zip(list1,list2)]
final

想要的最终输出:

[('C:\\Users\\user\\Desktop\\prog1\\merge\\AST\\AST.shp',
'C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp'),etc..]

最佳答案

我会用 collections.defaultdict() 对文件进行分组, 然后在单独的列表中输出长度为 2 的对。

演示:

from os.path import basename
from collections import defaultdict
from pprint import pprint

f1 = [
"C:\\Users\\user\\Desktop\\prog1\\merge\\AST\\AST.shp",
"C:\\Users\\user\\Desktop\\prog1\\merge\\ASTI\\ASTI.shp",
"C:\\Users\\user\\Desktop\\prog1\\merge\\ASTO\\ASTO.shp",
]

f2 = [
"C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp",
"C:\\Users\\user\\Desktop\\programs\\merge\\ASTI\\ASTI.shp",
"C:\\Users\\user\\Desktop\\programs\\merge\\AWE\\AWE.shp", # THIS IS EXTRA
"C:\\Users\\user\\Desktop\\programs\\merge\\ASTO\\ASTO.shp",
]

files = defaultdict(list)
for path in f1 + f2:
filename = path.split('\\')[-1]
files[filename].append(path)

pairs = [tuple(v) for k, v in files.items() if len(v) == 2]
pprint(pairs)

输出:

[('C:\\Users\\user\\Desktop\\prog1\\merge\\AST\\AST.shp',
'C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp'),
('C:\\Users\\user\\Desktop\\prog1\\merge\\ASTI\\ASTI.shp',
'C:\\Users\\user\\Desktop\\programs\\merge\\ASTI\\ASTI.shp'),
('C:\\Users\\user\\Desktop\\prog1\\merge\\ASTO\\ASTO.shp',
'C:\\Users\\user\\Desktop\\programs\\merge\\ASTO\\ASTO.shp')]

注意:使用os.path.basename()从 Windows 路径中提取文件名仅适用于 Windows。它在 Unix 环境下什么都不做。

关于python - 压缩两个具有相同文件名的列表中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53388243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com