在csv phare期间,python程序获得KILLED而没有错误

时间:2016-01-05 18:14:03

标签: python csv

我正在尝试将逗号分隔的csv文件转换为Pipe分隔符。我不使用逗号分隔的原因是因为我正在使用此文件并导入它的mysql数据库。一些字段本身有一个逗号,因此当我使用逗号分隔导入数据导入的字段正在更改时,所以我运行下面的python脚本将其从逗号更改为管道...所以当我导入数据,逗号本身仍然保留在需要的地方,我使用PIPE分隔符导入...但由于某种原因它失败了,有一点要记住它,这个确切的事情在上个月文件的时候工作正常400MB,而不是大约600MB

[root@host Dec]# python
Python 2.7.10 (default, Dec  8 2015, 18:25:23)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import csv
>>>
>>> with open('/root/Dec/dec_no_quotes.csv', 'rb') as fin, \
...     open('/root/Dec/dec_pipe.txt', 'wb') as fout:
...     reader = csv.DictReader(fin)
...     writer = csv.DictWriter(fout, reader.fieldnames, delimiter='|')
...     writer.writeheader()
...     writer.writerows(reader)
...
Killed
[root@host Dec]#

这是通过dmseg找到的内存不足消息......

[1710282.264394]内存不足:杀死进程22798(python)得分861或牺牲孩子 [1710282.269487]被杀的进程22798(python)total-vm:1954188kB,anon-rss:1818208kB,file-rss:176kB

1 个答案:

答案 0 :(得分:2)

令人惊讶的是,DictWriter将行转换为列表,然后调用低级编写器。来自2.x来源......

def writerows(self, rowdicts):
    rows = []
    for rowdict in rowdicts:
        rows.append(self._dict_to_list(rowdict))
    return self.writer.writerows(rows)

由于您没有使用列名,因此没有充分的理由使用DictWriter,这比较慢并且如上所述,不是很可扩展。只需使用基础编写器。

>>> with open('/root/Dec/dec_no_quotes.csv', 'rb') as fin, \
...     open('/root/Dec/dec_pipe.txt', 'wb') as fout:
...     reader = csv.reader(fin)
...     writer = csv.writer(fout, delimiter='|')
...     writer.writerows(reader)
...