避免OSError:[Errno 22]读取()大文件时参数无效

时间:2018-08-06 18:36:52

标签: python text ram

我正在尝试将大型.txt文件全部读取到内存中(一次一个),以随机选择行,直到满足特定条件为止。我不能使用readlines()linecache.getline()或类似名称,因为文件的行由\n\n而不是\n分隔。 (在\n上拆分会导致奇怪的半句,等等。)理想情况下,我也不想将数据拆分为多个块,以避免从文件的特定部分进行过采样。目前,当我尝试将文件加载到内存中并使用read().split('\n\n')沿着文件的分隔符分开时,程序会因

崩溃
  

OSError:[Errno 22]无效的参数

我是不是很幸运,还是有解决方法? RAM不是问题。

编辑:我刚刚尝试使用Python 2.7.10和相同的read().split('\n\n')将文件加载到内存中,但工作正常,没有错误。所以我想我的问题应该更具体:Python 3+是否有解决方法?

EDIT2,根据Ivan的坚持:您可以使用以下代码复制我的问题

with open('file_larger_than_2gb.txt', 'r') as f:
    source = f.read().split('\n\n')

在Python 2上运行良好,并在Python 3上触发OSError

1 个答案:

答案 0 :(得分:1)

此问题是由macOS 10.13.6 Beta中的一个错误引起的。该问题已在2018年7月10日发布的完整版本10.13.6中得到解决。