我很难将一个大的(50GB)csv文件分成更小的部分。每行有几千个字段。一些字段是双引号中的字符串,其他字段是整数,小数和布尔值。
我想逐行解析文件,并按每行中的字段数进行拆分。字符串可能包含几个逗号(例如),以及许多空字段。
,, 1,30,50,“由父亲,儿子和女儿以4,000美元的价格出售”,,,,, 12 ,,, 20.9,0,
我尝试使用
perl -pe' s{("[^"]+")}{($x=$1)=~tr/,/|/;$x}ge ' file >> file2
将引号内的逗号更改为|但那没用。我打算用
awk -F"|" conditional statement appending to new k_fld_files file2
有更简单的方法吗?我正在看python,但我可能需要一个实用程序来逐行处理文件。
答案 0 :(得分:3)
使用Python - 如果您只想解析包含嵌入分隔符的CSV,并使用新的分隔符进行流式处理,那么请执行以下操作:
import csv
import sys
with open('filename.csv') as fin:
csvout = csv.writer(sys.stdout, delimiter='|')
for row in csv.reader(fin):
csvout.writerow(row)
否则,要做各种各样的事情并不困难。
每列输出文件的示例(未经测试):
cols_to_output = {}
for row in csv.reader(fin):
for colno, col in enumerate(row):
output_to = cols_to_output.setdefault(colno, open('column_output.{}'.format(colno), 'wb')
csv.writer(output_to).writerow(row)
for fileno in cols_to_output.itervalues():
fileno.close()