Enthought Canopy中的CSV阅读器问题

时间:2013-09-19 07:38:19

标签: csv enthought canopy

我正在尝试读取csv文件。问题是它太大了,我不得不使用错误处理程序。在错误处理程序中,我必须调用csv.field_size_limit()。因为我一直收到“限制必须是整数”错误,所以它本身不起作用。从进一步的研究中,我发现这可能是一个安装错误。我已经使用软件包管理器安装了所有第三方工具,所以我不确定会出现什么问题。有关如何纠正此问题的任何想法?

import sys
import csv
maxInt = sys.maxsize
decrement = True
while decrement:
    decrement = False
    try:
        csv.field_size_limit(maxInt)
    except OverflowError:
        maxInt = int(maxInt/10)
        decrement = True
with open("Data.csv", 'rb') as textfile:
    text = csv.reader(textfile, delimiter=" ", quotechar='|')
    for line in text:
        print ' '.join(line)

1 个答案:

答案 0 :(得分:3)

简短回答:我猜你是在64位Windows上。如果是,请尝试使用sys.maxint代替sys.maxsize。实际上,您可能仍会遇到问题,因为我认为csv.field_size_limit()将尝试预先分配该大小的内存。您确实想要估算您需要的实际字段大小,并且可能加倍。 sys.maxintsys.maxsize都太大了。

长解释:Python int对象存储C long个整数。在所有相关的32位平台上,指针大小或内存偏移量和C long整数都是32位。在大多数UNIXy 64位平台上,指针大小或内存偏移量和C long整数都是64位。但是,64位Windows决定将C long整数保持为32位,同时将指针大小提高到64位。 sys.maxint表示最大的Python int(因此是C long),而sys.maxsize是最大的内存偏移量。因此,在64位Windows上,sys.maxsize是一个Python long整数,因为Python int类型不能容纳那么大的数量。我怀疑csv.field_size_limit()实际上需要一个适合真正的Python int对象的数字。这就是您收到OverflowErrorlimit must be an integer错误的原因。