我正在尝试读取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)
答案 0 :(得分:3)
简短回答:我猜你是在64位Windows上。如果是,请尝试使用sys.maxint
代替sys.maxsize
。实际上,您可能仍会遇到问题,因为我认为csv.field_size_limit()
将尝试预先分配该大小的内存。您确实想要估算您需要的实际字段大小,并且可能加倍。 sys.maxint
和sys.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
对象的数字。这就是您收到OverflowError
和limit must be an integer
错误的原因。