我有一些 csv 文件的列太多,LibreOffice Calc 无法打开,但只有几行。如果我可以转置 csv 文件,应该没问题,因为 Calc 可以处理的行比列多得多。
答案1
一个简单的 python 程序就可以完成这项工作(因为这并没有真正经过测试:请提前备份你的 csv 文件!):
import csv
import sys
infile = sys.argv[1]
outfile = sys.argv[2]
with open(infile) as f:
reader = csv.reader(f)
cols = []
for row in reader:
cols.append(row)
with open(outfile, 'wb') as f:
writer = csv.writer(f)
for i in range(len(max(cols, key=len))):
writer.writerow([(c[i] if i<len(c) else '') for c in cols])
您可以将其保存到文件“my_csv_transposer.py”中,并从命令行调用它,如下所示:
python my_csv_transposer.py <theinfilename> <theoutfilename>
答案2
您可以像这样从 shell 中使用该脚本:
$ ./transpose_csv < theinfilename > theoutfilename
脚本如下:
#!/usr/bin/env python
import sys, csv, itertools
rows = itertools.izip(*csv.reader(sys.stdin, delimiter=','))
sys.stdout.writelines(','.join(row) + '\n' for row in rows)
答案3
为了参考,这里是 Ruby 中的相同咒语:
require 'CSV'
rows = CSV.new($stdin).read
puts rows.transpose.map { |x| x.join ',' }