【问题标题】:File size limit for read()?read() 的文件大小限制?
【发布时间】:2017-05-09 23:35:17
【问题描述】:

我在尝试使用 Python 3.5 加载大文件时遇到了问题。使用不带参数的read() 有时会给出OSError: Invalid argument。然后我尝试只读取文件的一部分,它似乎工作正常。我已经确定它在2.2GB 附近的某个地方开始失败,下面是示例代码:

>>> sys.version
'3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]'
>>> x = open('/Users/username/Desktop/large.txt', 'r').read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument
>>> x = open('/Users/username/Desktop/large.txt', 'r').read(int(2.1*10**9))
>>> x = open('/Users/username/Desktop/large.txt', 'r').read(int(2.2*10**9))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument

我还注意到这在 Python 2.7 中不会发生。这是在 Python 2.7 中运行的相同代码:

>>> sys.version
'2.7.10 (default, Aug 22 2015, 20:33:39) \n[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)]'
>>> x = open('/Users/username/Desktop/large.txt', 'r').read(int(2.1*10**9))
>>> x = open('/Users/username/Desktop/large.txt', 'r').read(int(2.2*10**9))
>>> x = open('/Users/username/Desktop/large.txt', 'r').read()
>>>

我正在使用 OS X El Capitan 10.11.1。

这是一个错误还是应该使用其他方法来读取文件?

【问题讨论】:

  • 我猜文件加载能力主要取决于你的设备在那个时间点有多少可用内存。
  • 我认为这可能是个问题,但是:A) 我有 16GB,现在只使用了 8 个。 B)如果我切换到 python2.7 工作正常
  • 从输出的第一个 sn-p 中显示的内容来看,看起来 &gt;&gt;&gt; x = open('/Users/username/Desktop/large.txt', 'r').read(int(2.1*10**9)) 有效,因为在执行时没有引发 OSError。不同的结果也可能是由于使用了两个不同的编译器来构建 Python 解释器。见Difference between LLVM, GCC 4.2 and Apple LLVM compiler 3.1。
  • 是的,2.1*10**9 有效。我尝试了几个值,但注意到它在 2.1 和 2.2 之间的某个地方开始失败。

标签: python macos python-2.7 file python-3.x


【解决方案1】:

是的,你遇到了一个错误。

好消息是其他人也发现了它,并且已经在 Python 错误跟踪器中为它创建了一个问题,请参阅:Issue24658 - open().write() fails on 2 GB+ data (OS X)。这似乎取决于平台(仅限 OS-X),并且在使用 read 和/或 write 时可重现。显然,fread.c 在 OS-X 的 libc 实现中的实现方式存在问题,请参阅here。

坏消息是 它仍然处于打开状态(并且目前处于非活动状态)因此,您必须等待它解决。无论哪种方式,如果您对细节感兴趣,您仍然可以查看那里的讨论。


作为一种解决方案,我很确定您可以回避这个问题,直到通过读取块并在处理过程中链接块来解决它。写作时也这样做。不幸的是,它可能会奏效。

【讨论】:

  • 错误报告甚至提到了堆栈溢出帖子!如果没有 SO,python 会做什么?
  • @Jean-FrançoisFabre 可能有更多问题 :-)
猜你喜欢
  • 2011-04-05
  • 2010-10-26
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多