【问题标题】:Merging different CSV files合并不同的 CSV 文件
【发布时间】:2018-08-07 16:23:38
【问题描述】:

我想根据文件名的条件合并不同的文件。例如,

Name1_Stuff1_A.csv  
Name1_Stuff1_B.csv  
Name1_Stuff2_A.csv    
Name1_Stuff2_B.csv    
Name1_Stuff3_A.csv  
Name1_Stuff3_B.csv 

合并:

Name1_Stuff1_A + Name1_Stuff2_A + Name1_Stuff3_A -> Name1_Total_A  
Name1_Stuff1_B + Name1_Stuff2_B + Name1_Stuff3_B -> Name1_Total_B  
Then move on to another name, e.g., Name2, and so on

我试过了:

    for name in names:
        with open('{}_Total_A.csv'.format(name), 'a') as merged_file:
            for file in glob.glob('*.csv'):
                for line in open(file, 'r'):
                    merged_file.write(line)

但它只返回 A(没有 B):

    Name1_Total_A.csv
    Name2_Total_A.csv

并且A文件与所有文件合并。

我该怎么做:

    Name1_Total_A.csv
    Name2_Total_B.csv
    Name1_Total_A.csv
    Name2_Total_B.csv

其中 Name1_Total_A.csv 按 Name1_Stuff1_A.csv、Name1_Stuff2_A.csv 和 Name1_Stuff3_A.csv 的顺序合并,其他文件也是如此

谢谢!

【问题讨论】:

  • 我真的认为您在询问我们之前就已经到了尝试自己的想法的地步。如果这两种方法不起作用,您的计算机不会爆炸 :) 尝试它们,如果有问题,请尝试在它们的基础上构建,如果您完全卡住,请提出问题。
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。 StackOverflow 不是设计、编码、研究或教程服务。一般来说,“这行得通”的问题最好向最终权威提出:Python 运行时系统。 :-)
  • 感谢@roganjosh 和 Prune 的友好回复。对不起,这是我第一次在这里发布问题。我尝试了 for 循环,但没有尝试拆分。 for 循环将返回格式为 *_D.csv 的所有文件。所以它将彼得、约翰、杰克、乔合并到一个文件中,这不是我想要的。我知道问题应该是由 for 循环引起的,就像我如何构造它一样。但我真的被困在那里。你能解释一下吗?不胜感激。
  • edit 显示您的 CSV 文件示例以及您希望合并的 CSV 文件如何显示的问题。
  • 感谢@MartinEvans。我想现在应该更清楚了。

标签: python csv merge append concatenation


【解决方案1】:

您可以将代码压缩如下:

from itertools import product

for name, ab in product(range(1, 4), ['A', 'B']):
    with open('Name{}_Total_{}.csv'.format(name, ab), 'a') as merged_file:
        for stuff in range(1, 4):
            with open('/Name{}_Stuff{}_{}.csv'.format(name, stuff, ab), 'r') as f_input:
                merged_file.write(f_input.read())

itertools.product() 是另一种编写嵌套 for 循环的方式。尝试添加一些print 语句,看看它是如何工作的。

【讨论】:

    【解决方案2】:

    我想我得到了答案,但它太乏味了。有什么办法可以提高效率吗?谢谢。

    for each_name in names:
        with open('/{}_Total_A.csv'.format(each_name), 'a') as merged_file:
            stuff1 = open('/{}_Stuff1_A.csv'.format(each_name), 'r').read()
            merged_file.write(stuff1)
            stuff2 = open('/{}_Stuff2_A.csv'.format(each_name), 'r').read()
            merged_file.write(stuff2)
            stuff3 = open('/{}_Stuff3_A.csv'.format(each_name), 'r').read()
            merged_file.write(stuff3)
    
        with open('/{}_Total_B.csv'.format(each_name), 'a') as merged_file:
            stuff1 = open('/{}_Stuff1_B.csv'.format(each_name), 'r').read()
            merged_file.write(stuff1)
            stuff2 = open('/{}_Stuff2_B.csv'.format(each_name), 'r').read()
            merged_file.write(stuff2)
            stuff3 = open('/{}_Stuff3_B.csv'.format(each_name), 'r').read()
            merged_file.write(stuff3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 2022-07-28
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多