如何查找与当前文件具有匹配模式的文件并合并?

时间:2019-03-11 08:55:48

标签: python python-3.x

我有一个文件目录,其中包含一天中记录的多个文件。但是我需要合并以相同ID结尾的文件,因此我要尝试使用的逻辑是遍历目录中的每个文件,然后查找具有匹配ID的文件。例如,我的文件存储如下:

a_1234_d.csv
b_1234_d.csv
c_1234_d.csv
a_1256_d.csv
b_1256_d.csv
c_1256_d.csv

这些文件不一定按上述顺序存储,因此我需要归档与它们之间的ID相匹配的文件并将它们组合在一起。到目前为止,我已经尝试了下面的代码,但是我需要帮助来纠正模式匹配部分,因为这对于数百个文件来保持每个id的更改不切实际。

f = os.listdir(dat_folder)

for file in f:
    if fnmatch.fnmatch(file, '*1234.csv'):
        print(file)

3 个答案:

答案 0 :(得分:2)

我稍微修改了LordDot的代码:

import re                                                                                                                                                     

f = ["a_1234_d.csv", "b_1234_d.csv", "c_1234_d.csv", "a_1256_d.csv", "b_1256_d.csv", "c_1256_d.csv"]

file_to_compose = {}
for file in f:
    lead, id_of_file, tail = re.split(r'[_]', file)
    if id_of_file in file_to_compose:
        file_to_compose[id_of_file].append(file)
    else:
        file_to_compose[id_of_file] = [file]

for (k, v) in file_to_compose.items():
    print (f'id {k} contains files: {", ".join(v)}')

输出:

id 1234 contains files: a_1234_d.csv, b_1234_d.csv, c_1234_d.csv 
id 1256 contains files: a_1256_d.csv, b_1256_d.csv, c_1256_d.csv

您可以轻松地合并属于同一id的所有文件。

答案 1 :(得分:1)

如果我错了,请纠正我,但我了解您有很多不同的ID。如果它们始终以'_'分隔,则可以借助字符串Type的split()-Funktion获取ID。然后,您只需要浏览所有文件,检查编号并检查是否已处理该编号。 也许是这样的:

f = ["a_1234_d.csv","b_1234_d.csv","a_1235_d.csv"]

processedFiles = []

for file in f:
    number = file.split("_")[1]
    if number not in processedFiles:

        #do your code. now you know the number

        processedFiles = processedFiles + [number]
        print(processedFiles)

对于您的代码,看看Nullman的答案可能会有所帮助。

答案 2 :(得分:0)

glob模块在​​这里很有用

from glob import glob

print(glob(dat_folder + '*1234.csv'))

glob返回匹配列表
如果您要使用迭代器而不是列表,请考虑使用iglob(在有大量文件的情况下非常有用)