是否可以将csv文件垂直拆分为多个文件?我知道我们可以将单个大文件拆分成较小的文件,而不使用命令行提到的行。我有csv文件,其中列在某些列之后重复,并且我想按列分割该文件。如果不是那么可能,那么我们怎么能用python做呢?
考虑上面的示例,其中站点和地址垂直呈现多次,我想创建包含单个站点和单个地址的3个不同的csv文件
任何帮助都将受到高度赞赏,
由于
答案 0 :(得分:1)
假设您的输入文件名为~/Downloads/sites.csv
,并且如下所示:
Google,google.com,Google,google.com,Google,google.com
MS,microsoft.com,MS,microsoft.com,MS,microsoft.com
Apple,apple.com,Apple,apple.com,Apple,apple.com
您可以使用 cut 创建3个文件,每个文件包含一对公司/网站:
cut -d "," -f 1-2 < ~/Downloads/sites.csv > file1.csv
cut -d "," -f 3-4 < ~/Downloads/sites.csv > file2.csv
cut -d "," -f 5-6 < ~/Downloads/sites.csv > file3.csv
说明:
对于 cut 命令,我们将逗号(,)声明为分隔符,它将每一行拆分为&#39;字段的集合。
然后我们为每个输出文件指定我们想要包含哪些字段。
HTH!
答案 1 :(得分:0)
如果定期重复站点地址对,那么:
awk '{
n = split($0, ary, ",");
for (i = 1; i <= n; i += 2) {
j = (i + 1) / 2;
print ary[i] "," ary[i+1] >> "file" j ".csv";
}
}' input.csv
答案 2 :(得分:0)
以下脚本生成您想要的内容(基于根据您的需要调整的SO answer:列数,字段分隔符)。它将原始文件垂直拆分为2个列块(注意n=2
)并创建3个不同的文件(tmp.examples.1
,tmp.examples.2
,tmp.examples.3
或您为{{1}指定的任何文件变量):
f
如果您的awk -F "," -v f="tmp.examples" '{for (i=1; i<=NF; i++) printf (i%n==0||i==NF)?$i RS:$i FS > f "." int((i-1)/n+1) }' n=2 example.txt
文件包含后续数据:
example.txt