如何在Python中读取100GB单行文本文件?

如何在Python中读取100GB单行文本文件?,python,python-3.x,Python,Python 3.x,我在Windows平台上使用Python 3。由于文件读取器的默认行为是逐行使用文件,因此我很难处理只有一行的100GB文本文件 我知道一些解决方案,例如引入自定义记录分隔符,用\n替换频繁字符;但我想知道,我是否只能通过Python使用和处理我的文件 我只有8GB的内存。我的档案是销售记录(包括商品、价格、买家等)。我对文件的处理主要是编辑价格数字。使用|字符将记录彼此分隔。#/usr/bin/python3 导入操作系统,系统 #打开一个文件 fd=os.open(“foo.txt”,os.

我在Windows平台上使用Python 3。由于文件读取器的默认行为是逐行使用文件,因此我很难处理只有一行的100GB文本文件

我知道一些解决方案,例如引入自定义记录分隔符,用
\n
替换频繁字符;但我想知道,我是否只能通过Python使用和处理我的文件

我只有8GB的内存。我的档案是销售记录(包括商品、价格、买家等)。我对文件的处理主要是编辑价格数字。使用
|
字符将记录彼此分隔。

#/usr/bin/python3
导入操作系统,系统
#打开一个文件
fd=os.open(“foo.txt”,os.ordwr)
#阅读课文
ret=os.read(fd,12)
打印(重新解码())
#关闭打开的文件
操作系统关闭(fd)
打印(“成功关闭文件!!”)

打开(文件名“rb”)作为f的
:
尽管如此:
buf=f.read(最大尺寸)
如果不是buf:
打破
过程(buf)

从functools导入部分
使用open('somefile','rb')作为openfileobject:
对于iter中的块(部分(openfileobject.read,1024),b“”):
做某事

如果您运行的是64位操作系统,您可以将整个文件放入,让您的操作系统在后台为您实际读取
mmap
ed文件大多与
bytearray
呈现相同的界面,因此您可以执行以下操作:

import mmap

with open('largefile.txt', 'rb') as fd:
    buf = mmap.mmap(fd.fileno(), 0, access=mmap.ACCESS_READ)
然后,您就可以使用
buf
作为正常的
bytearray
,这样的操作可以在您的分隔符上进行迭代:

def split_sep(buf, sep=b'|'):
  pos = 0
  while True:
    end = buf.find(sep, pos)
    if end == -1:
       break
    yield buf[pos:end]
    pos = end + 1
  yield buf[pos:]

但这只是一个演示。您可能想做一些更复杂的事情,可能是在
生成
等之前对字节进行解码。

您想对该文件做什么?如果只有8GB RAM,则无法读取100GB内存。你应该寻找一个迭代的方法solution@C.Nivs同意,但OP应该告诉我们他想对文件内容做什么……迭代读取并不能解决这个问题。一个精心设计的问题会问如何处理数据量以及需要什么样的处理