【问题标题】:Converting multiple TSV files with same file name pattern (but different actual file names) into CSVs using Python使用 Python 将具有相同文件名模式(但实际文件名不同)的多个 TSV 文件转换为 CSV
【发布时间】:2020-10-30 14:36:44
【问题描述】:

一个文件夹中有多个 tsv 文件。我想将每个 tsv 文件转换为一个 csv 文件,并将所有 csv 文件合并为一个巨型 csv 文件。

customer_data = r"C:\Users\username\Desktop\folder\CustomerData_20201030031520.tsv"
customer_data = pd.read_csv(customer_data,  sep='\t', low_memory=False)

这就是我读取和写入 csv 文件的方式。如何有效地为多个 tsv 文件执行此操作,而不是手动重复此操作?

注意到文件名模式了吗?所有文件都将采用这种模式:

CustomerData_"year""month""day_number""random_digits".tsv

我的目标是将所有这些多个 CSV 合并为一个大型 CSV 文件。

【问题讨论】:

    标签: python csv


    【解决方案1】:

    如果需要合并一包格式相似的文件,不需要实际加载数据到内存,直接dump所有文件到一个即可。

    下面的片段将检查目录path 的模式pattern 并按文件名对结果列表进行排序。之后,排序后的列表将写入out_file文件中。

    outfile.write("\n") 是必需的,*.tsv 文件没有以空行结尾,否则应该注释掉。

    import os
    import re
    
    path = "c:\\temp\\1"
    out_file = "c:\\temp\\1\\big_file.tsv"
    pattern = re.compile("^.*_(\d{4})(\d{2})(\d{2})\d{1,10}.\w{3}$")
    
    matched_files = []
    
    for f in os.listdir(path):
      if os.path.isdir(os.path.join(path, f)):
        continue
    
      if not pattern.match(f):
        continue
    
      matched_files.append(f)
    
    matched_files = sorted(matched_files)
    
    with open(out_file, "w+") as outfile:
      for f in matched_files:
        with open(os.path.join(path, f), "r") as infile:
          outfile.writelines(infile.readlines())
    
        outfile.write("\n")
    

    【讨论】:

    • pattern = re.compile("^.*_(\d{4})(\d{2})(\d{2})\d{1,10}.\w {3}$") ===== 这条线到底是什么意思/做什么?
    • 它只匹配“anything_xxxxYYzzQQQQQQQQQQ.XXX”之类的文件并只处理它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2017-08-12
    相关资源
    最近更新 更多