如何在Python中读取100GB单行文本文件?
我在Windows平台上使用Python 3。由于文件读取器的默认行为是逐行使用文件,因此我很难处理只有一行的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.
\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应该告诉我们他想对文件内容做什么……迭代读取并不能解决这个问题。一个精心设计的问题会问如何处理数据量以及需要什么样的处理