Python随机访问文件

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)


Dav*_* M. 7

您可以使用linecache

import linecache
print linecache.getline(your_file.txt, randomLineNumber) # Note: first line is 1, not 0
Run Code Online (Sandbox Code Playgroud)


Gar*_*han 6

由于行可以是任意长度,你实际上无法获得一个随机行(无论你的意思是"一个数字实际上是随机的行"或"一个具有任意数字的行,由我选择")而不遍历整个文件.

如果kinda-sorta-random足够,你可以在文件中寻找一个随机位置然后向前读取,直到你遇到一个行终止符.但是,如果你想找到(比方说)行号1234,这将是无用的,如果你真的想要一个随机选择的行,它会非均匀地采样行.