[英]How to read a 100GB one-line text file in Python?
我在Windows平台上使用Python 3.由於文件閱讀器的默認行為是逐行使用文件,因此我很難處理只有一行的100GB文本文件。
我知道的解決方案,如本引入自定義記錄分隔符與更換頻繁的字符\\n
; 但我不知道有沒有我只能通過Python使用和處理我的文件?
我只有8GB的內存。 我的檔案是銷售記錄(包括物品,價格,買家......)。 我對該文件的處理主要是編輯價格編號。 使用|
將記錄彼此分開 字符。
# !/usr/bin/python3
import os, sys
# Open a file
fd = os.open("foo.txt",os.O_RDWR)
# Reading text
ret = os.read(fd,12)
print (ret.decode())
# Close opened file
os.close(fd)
print ("Closed the file successfully!!")
要么
with open(filename, 'rb') as f:
while True:
buf = f.read(max_size)
if not buf:
break
process(buf)
要么
from functools import partial
with open('somefile', 'rb') as openfileobject:
for chunk in iter(partial(openfileobject.read, 1024), b''):
do_something()
如果您正在運行64位操作系統,您可以將整個文件mmap
到並讓您的操作系統實際為您在后台進行閱讀。 mmap
ed文件通常與bytearray
呈現相同的接口,因此您可以執行以下操作:
import mmap
with open('largefile.txt', 'rb') as fd:
buf = mmap.mmap(fd.fileno(), 0, access=mmap.ACCESS_READ)
然后你可以使用buf
作為普通的bytearray
,這樣的操作迭代你的seperator:
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:]
但這只是一個演示。 你可能想要做一些更復雜的事情,也許在yield
之前從字節解碼等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.