簡體   English   中英

壓縮兩個具有相同文件名的列表中的項目?

[英]Zip items from two lists that have the same file name?

我有兩個清單:這個:

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

如何確保這些對將與 zip 后另一個列表中的相應同名匹配?

也許我們與他們以前的文件夾匹配? 喜歡:

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 環境中根本不會做任何事情。

這並不能直接使用 zip() 解決問題,但如果有人來到這里尋找一種從兩個具有相同文件名的列表中獲取文件的方法。 這是我在 Python 中嘗試過的:

  • 給定list1,list2

  • 我們想從 list1 中獲取與 list2 中名稱匹配的文件

    output_list = [list1 for list1 in list2]

您可以繼續 zip(list1, list2) 以確保兩個列表中的文件名相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM