2017-10-14 25 views
0

我创造了这样的文件列表:如果我有一个CSV文件的Python列表,我如何将它们合并成一个巨大的CSV文件?

merge_files = [] 
for i in range(2, 12): 
    merge_files.append(pandas.read_csv(final_user_study_path + "/P" + str(i) + "/DataCollection/data/merge.csv")) 

我想创建一个巨大的csv文件,从这个列表中的所有文件。

这是最有效的方法吗?

+3

使用Python这可能是矫枉过正的时候是微不足道的做到这一点使用shell –

+2

@matthewDaly是正确的..只是猫在一起。 – ergonaut

+0

尽管确实可以用Python来解决这个问题,但您可以在Python中快速构建逻辑以排除某些路径,遍历某些子路径并进行过滤等等。目前尚不清楚OP是否将使用这一次或多次。 –

回答

2

我推荐unix shell。如果他们没有头,或者只有先有一个标题:

cat file1.csv file2.csv ... fileN.csv > result.csv 

如果他们有头,你必须先切断它们:

cat file1.csv > result.csv 
for i in {1..N}; do tail +2 file$i.csv >> result.csv; done 

如果文件在不同的目录 - 使用路径每个文件:

cat path1/file.csv path2/file.csv > result.csv 
+0

如果它们位于具有相同文件名的不同目录中,我仍可以执行此操作吗? – dirtysocks45

+0

是的,你可以使用任何文件的正确路径。 –

0

大熊猫方法是在dataframes使用CONCAT,如果你想要做一些操作过这可能是有用的(如过滤,删除重复...等)

import io 
import pandas as pd 

让我们创建两个文件

csv1 = "a,b\n1,2" 
csv2 = "a,b\n3,4" 

file1 = io.StringIO(csv1) 
file2 = io.StringIO(csv2) 

遍历他们CONCAT:

pd.concat((pd.read_csv(i) for i in [file1,file2])).to_csv(index=False) 

结果:

'a,b\n1,2\n3,4\n' 

适合哟ü在可读的方式(我的首选方式):

files = [] 
for i in range(2, 12): 
    path = "{}/P{}/DataCollection/data/merge.csv".format(final_user_study_path,i) 
    files.append(path) 

pd.concat((pd.read_csv(i) for i in files)).to_csv("output.csv",index=False) 
相关问题