python limit必须是整数

时间:2013-09-14 06:38:19

标签: python csv

我正在尝试运行以下代码但由于某种原因我收到以下错误:“TypeError:limit必须是整数”。

读取csv数据文件

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的新手,但我真的很想学到更多东西。

2 个答案:

答案 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()的需要。

- 最初由用户roskakori发布在此相关question