如果我有一个CSV文件的Python列表,如何将它们全部合并到一个巨大的CSV文件中?

时间:2017-10-14 20:45:11

标签: python list file 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文件,其中包含此列表中的所有文件。

这是最有效的方法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

pandas方式是在数据帧上使用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)

循环遍历它们并结束:

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)