Man*_*tis 13 python file-io file random-access large-files
是否有Python文件类型用于访问随机行而不遍历整个文件?我需要在一个大文件中搜索,将整个内容读入内存是不可能的.
任何类型或方法将不胜感激.
sen*_*rle 15
这似乎只是mmap
为了设计的东西.一个mmap
对象创建一个字符串一样的界面到一个文件:
>>> f = open("bonnie.txt", "wb")
>>> f.write("My Bonnie lies over the ocean.")
>>> f.close()
>>> f.open("bonnie.txt", "r+b")
>>> mm = mmap(f.fileno(), 0)
>>> print mm[3:9]
Bonnie
Run Code Online (Sandbox Code Playgroud)
如果您想知道,mmap
也可以将对象分配给:
>>> print mm[24:]
ocean.
>>> mm[24:] = "sea. "
>>> print mm[:]
My Bonnie lies over the sea.
Run Code Online (Sandbox Code Playgroud)
您可以使用linecache:
import linecache
print linecache.getline(your_file.txt, randomLineNumber) # Note: first line is 1, not 0
Run Code Online (Sandbox Code Playgroud)
由于行可以是任意长度,你实际上无法获得一个随机行(无论你的意思是"一个数字实际上是随机的行"或"一个具有任意数字的行,由我选择")而不遍历整个文件.
如果kinda-sorta-random足够,你可以在文件中寻找一个随机位置然后向前读取,直到你遇到一个行终止符.但是,如果你想找到(比方说)行号1234,这将是无用的,如果你真的想要一个随机选择的行,它会非均匀地采样行.