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

cas*_*des 5 python csv

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

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

标头不包含成员名称的列.我想补充一点,作为第一项.

这是我想要做的部分:如何在Python中合并200个csv文件.我只是不确定如何遍历具有不同名称的文件,并将这些名称添加到csv.

谢谢!

phi*_*hem 7

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

import glob
import os
os.chdir("/mydir")
for files in glob.glob("*.csv"):
    print files
Run Code Online (Sandbox Code Playgroud)

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

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

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

'Votes-[member name]-(2010-2014)-[download-time].csv'.split('-')[1]
Run Code Online (Sandbox Code Playgroud)

更新bash的解决办法:你可以保存这个文本,并从终端运行(见说明这里适用于Mac)

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

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

cat <<"EOF" > 2.csv
a,b,c
d,e,f
EOF
Run Code Online (Sandbox Code Playgroud)

解析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
Run Code Online (Sandbox Code Playgroud)

第二个更新:如果你想删除重复的标题,最简单的方法是使用'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
Run Code Online (Sandbox Code Playgroud)