我使用listdir
读取了两个文件夹中的文件:
from os import listdir
list_1 = [file for file in listdir("./folder1/") if file.endswith(".csv")]
list_2 = [file for file in listdir("./folder2/") if file.endswith(".json")]
现在我有两个列表:
list_1 = ['12_a1_pp.csv', '32_a3_pp.csv', '45_a17_pp.csv', '81_a123_pp.csv']
list_2 = ['12_a1.json', '32_a3.json', '61_a54.json']
我想找到相应的两个子列表,其中包含那些名称的初始部分相同的文件。换句话说:
list_1b = ['12_a1_pp.csv', '32_a3_pp.csv']
list_2b = ['12_a1.json', '32_a3.json']
我该怎么做?
请注意,listdir
部分可能与回答问题无关紧要。我只包含它,因为如果 listdir
的结果保证按字母顺序排列,那么这可能有助于遍历这两个列表。当然,在这个简单的示例中,列表很短,但在实际用例中,它们包含数百个文件。
最佳答案
一个更 pythonic 的方法是对集合使用 &
(交集)运算符:
common = set(x[:-7] for x in list_1) & set(x[:5] for x in list_2)
list_1b = [x + '_pp.csv' for x in common]
list_2b = [x + '.json' for x in common]
编辑:如果您需要为每个列表拆分特定字符(请参阅评论),这里是更新版本(搜索 list_1 中的最后一个“_”并搜索 list_2 中的最后一个“.”):
common = set(x[:x.rindex('_')] for x in list_1) & set(x[:x.rindex('.')] for x in list_2)
关于python - 在两个文件夹中查找名称首字母相同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49733101/