gpt4 book ai didi

python - 读取非常大的一行文本文件

转载 作者:太空狗 更新时间:2023-10-29 22:07:39 26 4
gpt4 key购买 nike

我有一个 30MB 的 .txt 文件,有一个 行数据(3000 万位数)
不幸的是,我尝试过的每种方法(mmap.read()readline()、分配 1GB RAM、for 循环)都需要 45 分钟以上才能完全读取文件.我在互联网上找到的每一种方法似乎都适用于每一行都很小的事实,因此内存消耗仅与文件中最大的行一样大。这是我一直在使用的代码。

start = time.clock()
z = open('Number.txt','r+')
m = mmap.mmap(z.fileno(), 0)
global a
a = int(m.read())
z.close()
end = time.clock()
secs = (end - start)
print("Number read in","%s" % (secs),"seconds.", file=f)
print("Number read in","%s" % (secs),"seconds.")
f.flush()
del end,start,secs,z,m

除了将数字从一行拆分到多行;我不想这样做,是否有一种更清洁的方法不需要一个小时的大部分时间?

顺便说一句,我不一定非要使用文本文件。

我有:Windows 8.1 64 位、16GB RAM、Python 3.5.1

最佳答案

文件读取速度很快(<1s):

with open('number.txt') as f:
data = f.read()

将 3000 万位的字符串转换为整数,这很慢:

z=int(data) # still waiting...

如果您将数字存储为原始大端或小端二进制数据,则 int.from_bytes(data,'big') 会快得多。

如果我的数学计算正确(注意 _ 在 Python 的交互式解释器中表示“最后一行的答案”):

>>> import math
>>> math.log(10)/math.log(2) # Number of bits to represent a base 10 digit.
3.3219280948873626
>>> 30000000*_ # Number of bits to represent 30M-digit #.
99657842.84662087
>>> _/8 # Number of bytes to represent 30M-digit #.
12457230.35582761 # Only ~12MB so file will be smaller :^)
>>> import os
>>> data=os.urandom(12457231) # Generate some random bytes
>>> z=int.from_bytes(data,'big') # Convert to integer (<1s)
99657848
>>> math.log10(z) # number of base-10 digits in number.
30000001.50818886

编辑:仅供引用,我的数学不正确,但我修正了它。感谢您在没有注意到的情况下投了 10 票 :^)

关于python - 读取非常大的一行文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36820605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com