我是Python的新手,所以这个问题可能有点基础。我有44个csv文件具有相同的标题和不同的文件名。我想将它们全部合并到一个文件中。
每个文件名为“Votes- [member-name] - (2010-2014) - [download-time] .csv”
标题不包含成员名称的列。我想将其添加为第一项。
这是我想要做的部分:how to merge 200 csv files in Python。我只是不确定如何遍历具有不同名称的文件,并将这些名称添加到csv。
谢谢!
答案 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