我正在尝试运行以下代码但由于某种原因我收到以下错误:“TypeError: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)
星号行中出现错误。我只在csv read语句上面添加了额外的位,因为文件太大而无法正常读取。或者,我可以将文件从csv更改为文本文件,但我不确定这是否会进一步损坏数据我实际上看不到任何数据,因为文件大于2GB,因此打开成本很高。 / p>
有什么想法吗?我是Python的新手,但我真的很想学到更多东西。
答案 0 :(得分:4)
我不确定这是否有资格作为答案,但这里有一些事情:
首先,csv阅读器会自动缓存CSV的每一行,因此文件大小不应太大,2KB或2GB,无论如何。
可能重要的是字段本身内的列数或数据量。如果这个CSV在每一栏都包含战争与和平,那么是的,你将会遇到一个问题。
可能调试的一些方法是运行print sys.maxsize
,然后打开python解释器import sys, csv
,然后运行csv.field_size_limit(sys.maxsize)
。如果你得到一些非常小的数字或异常,你可能安装了一个糟糕的Python。否则,请尝试使用更简单的文件版本。也许第一行,或前几行,只有1列。看看您是否可以重现尽可能小的情况,并消除系统和文件大小的可变性。
答案 1 :(得分:0)
在带有Python 2.6的Windows 7 64位上,maxInt = sys.maxsize返回9223372036854775807L,从而导致TypeError:在调用csv.field_size_limit(maxInt)时,limit必须是整数。有趣的是,使用maxInt = int(sys.maxsize)不会改变这一点。一个粗略的解决方法是使用csv.field_size_limit(2147483647),这当然会在其他平台上引起问题。在我的情况下,这是adquat以识别CSV中的损坏值,修复其他应用程序中的导出选项并删除对csv.field_size_limit()的需要。
上