Python 合并不同的CSV文件

Python 合并不同的CSV文件,python,csv,merge,append,concatenation,Python,Csv,Merge,Append,Concatenation,我想根据文件名的条件合并不同的文件。比如说, 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

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

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):

A文件与所有文件合并

我如何做到这一点:

    Name1_Total_A.csv
    Name2_Total_B.csv
    Name1_Total_A.csv
    Name2_Total_B.csv
其中,Name1_Total_A.csv按Name1_stuff 1_A.csv、Name1_stuff 2_A.csv和Name1_stuff 3_A.csv的顺序合并,其他文件也是如此


谢谢

我想我得到了答案,但它太乏味了。有没有办法使它更有效率?谢谢

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)

您可以将代码压缩如下:

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())

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

我真的认为,在询问我们之前,您正处于尝试自己想法的阶段。如果这两种方法都不起作用,你的计算机就不会爆炸:)试试它们,如果有问题,试着建立在它们之上,如果你完全陷入困境,问一个问题。欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。在这里申请。StackOverflow不是设计、编码、研究或教程服务。一般来说,“这是否有效”的问题最好向最终权威提出:Python运行时系统。:-)感谢@roganjosh和Prune的友好回复。对不起,这是我第一次在这里发问。我尝试了for循环,但没有尝试分割。for循环将返回格式为*\u D.csv的所有文件。所以它把彼得、约翰、杰克、乔合并成一个文件,这不是我想要的。我知道问题应该是由for循环引起的,比如我是如何构造它的。但我真的被困在那里了。你能解释一下吗?非常感谢。请回答问题以显示您的CSV文件示例以及您希望合并的CSV文件如何显示。谢谢@MartinEvans。我想现在应该更清楚了。
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())