5

我正在尝试运行以下代码,但由于某种原因,我收到以下错误:“TypeError:limit must be an integer”。

读取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 读取语句上方添加了额外的位,因为文件太大而无法正常读取。或者,我可以将文件从 csv 更改为文本文件,但我不确定这是否会进一步损坏数据我实际上无法看到任何数据,因为文件大于 2GB,因此打开成本很高。

有任何想法吗?我对 Python 还很陌生,但我真的很想了解更多。

4

2 回答 2

4

我不确定这是否有资格作为答案,但这里有几件事:

首先,csv 阅读器会自动缓冲 CSV 的每一行,因此文件大小不应该太重要,2KB 或 2GB 等等。

可能重要的是字段本身内的列数或数据量。如果此 CSV 在每一列中都包含战争与和平,那么是的,您在阅读它时会遇到问题。

一些潜在的调试方法是运行print sys.maxsize,然后打开一个 python 解释器,import sys, csv然后运行csv.field_size_limit(sys.maxsize)​​. 如果您得到一些非常小的数字或异常,则您可能安装了错误的 Python。否则,请尝试使用更简单的文件版本。也许是第一行,或者前几行,只有 1 列。看看您是否可以重现尽可能小的情况并消除系统和文件大小的可变性。

于 2013-09-14T06:46:39.330 回答
0

在带有 Python 2.6 的 Windows 7 64 位上,maxInt = sys.maxsize 返回 9223372036854775807L,从而导致 TypeError:调用 csv.field_size_limit(maxInt) 时限制必须是整数。有趣的是,使用 maxInt = int(sys.maxsize) 不会改变这一点。一个粗略的解决方法是简单地使用 csv.field_size_limit(2147483647) 这当然会在其他平台上引起问题。在我的情况下,这很适合识别 CSV 中的损坏值,修复其他应用程序中的导出选项并消除对 csv.field_size_limit() 的需要。

-- 最初由用户roskakori就这个相关问题发表

于 2017-01-10T00:54:45.263 回答