假设我有一个531 gig gzip压缩文本文件,其中512 5448 457 601 475行被'\n'分割,并希望在没有文件分割的情况下从中获取随机行.(别担心,它不是那么大;只是想说它是一个巨大的文件,我知道它有多少行.)
我通常如何使用较小的压缩文件:
import fileinput
import gzip
import random
list = []
for line in fileinput.input(file, openhook=gzip.open):
list.append(line)
listLength = len(list)
randomListLineOne = line[random.randint(0, listLength)]
randomListLineTwo = line[random.randint(0, listLength)]
...
Run Code Online (Sandbox Code Playgroud)
我在这个主题上发现了什么:
import random
def random_line(afile):
line = next(afile)
for num, aline in enumerate(afile):
if random.randrange(num + 2): continue
line = aline
return line
Run Code Online (Sandbox Code Playgroud)
Waterman的"水库算法"由Alex Martelli翻译,来自Knuth的"计算机编程艺术"
你能为压缩文件调整吗?我尝试将压缩文件设置为文件但是没有用.或者还有另一种(更简单的)方法来实现这一目标吗?