使用不同的文件名在Python中合并CSV文件

时间:2013-12-19 14:45:58

标签: python csv

我是Python的新手,所以这个问题可能有点基础。我有44个csv文件具有相同的标题和不同的文件名。我想将它们全部合并到一个文件中。

每个文件名为“Votes- [member-name] - (2010-2014) - [download-time] .csv”

标题不包含成员名称的列。我想将其添加为第一项。

这是我想要做的部分:how to merge 200 csv files in Python。我只是不确定如何遍历具有不同名称的文件,并将这些名称添加到csv。

谢谢!

1 个答案:

答案 0 :(得分:7)

要遍历文件名,您可以使用与回答here类似的方法,使用glob:

import glob
import os
os.chdir("/mydir")
for files in glob.glob("*.csv"):
    print files

然后,要将成员名称添加到标题,您可以逐行打印所有csv文件。如果该行是标题,则在与标题相同的行上打印成员名称。 (这不是真正的代码,但你可以明白这一点)

for files in glob.glob("*.csv"):
    for lines in files:
         if line == header:
              print member,line
         else:
              print line

拆分CSV文件并仅使用会员名称(稍作修改,以便没有连字符)

'Votes-[member name]-(2010-2014)-[download-time].csv'.split('-')[1]

bash解决方案的更新:您可以保存此文本并从终端运行(请参阅此处的instructions for Mac)

生成CSV文件(不是必需的)

cat <<"EOF" > 1.csv
1,2,3
4,5,6
EOF

cat <<"EOF" > 2.csv
a,b,c
d,e,f
EOF

解析CSV文件 - 此脚本获取所有CSV文件并将其文件名写为第一列。它还将它们放在一个文件中(注意我在debian linux上测试过,而不是mac)。

rm -f all.csv
for fyle in *.csv ; do 
    echo | awk -v f=$fyle '{ print f","$0 }' $fyle >> all.csv
done
exit 0

第二次更新:如果你想删除重复的标题,最简单的方法是使用'grep -v',它选择所有不匹配的行。您可以选择仅存在于标题中的通用字符串。

head -1 all.csv > nohead.csv # add one header line
grep -v "header string" all.csv >> nohead.csv # add rest of rows, with no headers