使用多个字段将文件拆分为较小的文件

时间:2012-08-17 00:23:48

标签: python unix csv sed awk

我很难将一个大的(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,但我可能需要一个实用程序来逐行处理文件。

1 个答案:

答案 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()