1

我正在尝试读取 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)
4

1 回答 1

3

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

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

于 2013-09-19T09:32:16.147 回答