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 pro 上的凭据提供程序 64 位

Windows 7 64 位 Visual Studio 2013 上的本机 cl.exe

在 64 位 Windows 7 和 64 位 Python 2.7 上安装 Pygame

使用 Python 2.7.3 在 64 位 Windows 7 上安装 Numpy [关闭]

AnkhSVN 在 Windows 7(64 位)上的 VS 2008 中未显示为源代码控制插件

Windows下python2.7安装64位mysqlclient