在使用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操作系统。
这是一个错误吗?还是应该使用另一种方法来读取文件?
>>> x = open('/Users/username/Desktop/large.txt', 'r').read(int(2.1*10**9))
已经成功执行,因为没有引发OSError
。不同的结果也可能是由于使用了两个不同的编译器来构建 Python 解释器。请参见 LLVM、GCC 4.2 和 Apple LLVM 编译器 3.1 之间的区别。 - martineau