我有一个非常庞大的CSV文件。大约有1700列和40000行,如下所示:
x,y,z,x1,x2,x3,x4,x5,x6,x7,x8,x9,...(about 1700 more)...,x1700
0,0,0,a1,a2,a3,a4,a5,a6,a7,a8,a9,...(about 1700 more)...,a1700
1,1,1,b1,b2,b3,b4,b5,b6,b7,b8,b9,...(about 1700 more)...,b1700
// (about 40000 more rows below)
我需要将此CSV文件拆分为多个文件,这些文件包含的列数较少,如:
# file1.csv
x,y,z
0,0,0
1,1,1
... (about 40000 more rows below)
# file2.csv
x1,x2,x3,x4,x5,x6,x7,x8,x9,...(about 1000 more)...,x1000
a1,a2,a3,a4,a5,a6,a7,a8,a9,...(about 1000 more)...,a1000
b1,b2,b3,b4,b5,b6,b7,b8,b9,...(about 1000 more)...,b1700
// (about 40000 more rows below)
#file3.csv
x1001,x1002,x1003,x1004,x1005,...(about 700 more)...,x1700
a1001,a1002,a1003,a1004,a1005,...(about 700 more)...,a1700
b1001,b1002,b1003,b1004,b1005,...(about 700 more)...,b1700
// (about 40000 more rows below)
有没有任何程序或图书馆这样做?
我已经用Google搜索了,但我发现的程序只按行而不按列拆分文件。
或者我可以使用哪种语言来有效地执行此操作?
我可以使用R,shell脚本,Python,C / C ++,Java
答案 0 :(得分:2)
您的示例数据和所需输出的单行解决方案:
cut -d, -f -3 huge.csv > file1.csv
cut -d, -f 4-1004 huge.csv > file2.csv
cut -d, -f 1005- huge.csv > file3.csv
cut
程序在大多数POSIX平台上都可用,并且是GNU Core Utilities的一部分。还有Windows version。
在python中更新,因为OP要求用可接受的语言编写程序:
# python 3 (or python 2, if you must)
import csv
import fileinput
output_specifications = ( # csv file name, selector function
('file1.csv', slice(3)),
('file2.csv', slice(3, 1003)),
('file3.csv', slice(1003, 1703)),
)
output_row_writers = [
(
csv.writer(open(file_name, 'wb'), quoting=csv.QUOTE_MINIMAL).writerow,
selector,
) for file_name, selector in output_specifications
]
reader = csv.reader(fileinput.input())
for row in reader:
for row_writer, selector in output_row_writers:
row_writer(row[selector])
这适用于给定的样本数据,可以使用input.csv
作为参数或通过stdin管道来调用。
答案 1 :(得分:0)
您可以在Microsoft Excel中打开该文件,删除多余的列,另存为文件#1的csv。对其他2个表重复相同的过程。
答案 2 :(得分:0)
使用像:
这样的小型Python脚本fin = 'file_in.csv'
fout1 = 'file_out1.csv'
fout1_fd = open(fout1,'w')
...
lines = []
with open(fin) as fin_fd:
lines = fin_fd.read().split('\n')
for l in lines:
l_arr = l.split(',')
fout1_fd.write(','.join(l_arr[0:3]))
fout1_fd.write('\n')
...
...
fout1_fd.close()
...
答案 3 :(得分:0)
我通常使用开放式办公室(或微软excel以防你使用Windows)来做这件事而无需编写任何程序并更改文件并保存。以下是两个有用的链接,展示了如何做到这一点。
https://superuser.com/questions/407082/easiest-way-to-open-csv-with-commas-in-excel
http://office.microsoft.com/en-us/excel-help/import-or-export-text-txt-or-csv-files-HP010099725.aspx