Windows 7(64 位)上的 Python 3.7 64 位:CSV - 字段大于字段限制(131072)[重复]
Posted
技术标签:
【中文标题】Windows 7(64 位)上的 Python 3.7 64 位:CSV - 字段大于字段限制(131072)[重复]【英文标题】:Python 3.7 64 bit on Windows 7 (64 bit): CSV - field larger than field limit (131072) [duplicate] 【发布时间】:2019-06-28 03:01:38 【问题描述】:_csv.Error: field larger than field limit (131072) 没有解决我的问题。
我有一个将 CSV 文件处理为 Excel 报告的脚本。该脚本运行良好,直到某个特定的 CSV 文件变得非常大(当前 > 12 MB)。
该脚本通常在 Windows 7 64 位上运行,因为团队使用的是 Windows 客户端。 Python 版本范围从 3.6 到 3.7.2 - 全部为 64 位。所有版本都会产生错误。
我得到第一名的错误是
_csv.Error: 字段大于字段限制 (131072)
使用搜索功能似乎很容易解决。但是当我包括
csv.field_size_limit(sys.maxsize)
这只会让事情变得更糟:
Traceback (most recent call last):
File "CSV-to-Excel.py", line 123, in <module>
report = process_csv_report(infile)
File "CSV-to-Excel.py", line 30, in process_csv_report
csv.field_size_limit(sys.maxsize)
OverflowError: Python int too large to convert to C long
根据我的研究,这个错误应该早就被修复了。
我目前的解决方法是使用代码运行良好的 Linux。但是,应该运行脚本的团队无法运行 Linux,而是锁定在 Windows 上。
脚本的代码是
#!c:\python37\python.exe
import csv
import sys
def process_csv_report(CSV_report_file):
files = []
files.append(CSV_report_file+"_low.csv")
files.append(CSV_report_file+"_med.csv")
files.append(CSV_report_file+"_high.csv")
first = True
try:
report = []
for f in files:
if first == True:
with open(f, "r", newline='', encoding='utf-8') as csvfile:
original = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in original:
report.append(row)
first = False
else:
with open(f, "r", newline='', encoding='utf-8') as csvfile:
original = csv.reader(csvfile, delimiter=',', quotechar='"')
# for the second and third file skip the header line
next(original, None)
for row in original:
report.append(row)
except Exception as e:
print("File I/O error! File: ; Error: ".format(f, str(e)))
exit(1)
return report
if __name__ == "__main__":
report = process_csv_report(infile)
虽然看起来很简单,但我无法解决问题,因为适用于其他人的解决方案在这里无缘无故地失败了。
最近有没有人看到 Python 的最新版本发生了这种情况?
【问题讨论】:
***.com/questions/15063936/… 解决方案不起作用,如此处所述。 您是否尝试过该问题的所有个答案。一些贡献者认为这是因为您的文本中有引号。他们还提出了解决OverflowError
的方法。
刚刚添加了一个答案:***.com/questions/15063936/…。
我投票决定以重复的形式关闭,因为此处提供的答案也已包含在原始问题/答案中
【参考方案1】:
您可以将sys.maxsize
替换为c integer max value,即2147483647
。
我知道 sys.maxsize
应该处理它,但我认为使用低于该屋顶的值,例如 1.000.000
应该可以解决您的问题。
更好的方法是min(sys.maxsize, 2147483646)
_csv
库是一个编译扩展,然后它使用 c 变量。
【讨论】:
以上是关于Windows 7(64 位)上的 Python 3.7 64 位:CSV - 字段大于字段限制(131072)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Windows 7 64 位 Visual Studio 2013 上的本机 cl.exe
在 64 位 Windows 7 和 64 位 Python 2.7 上安装 Pygame
使用 Python 2.7.3 在 64 位 Windows 7 上安装 Numpy [关闭]