我有一个巨大的文本文件,我想从中选择性地阅读几行。 使用tell()我知道我想要阅读的位置。
有没有办法可以在两个位置之间读取文件中的所有文字? 像file.read(beginPos,endPos)
或者,可能会读取包含beginPos的行号和包含endPos的行号之间的所有文本?
答案 0 :(得分:5)
如果您现在是起始点(使用tell()
)和结束点,您只需执行file.read(end-start)
,它将读取end-start
个字节。如果您在开始时没有达到正确的偏移量,请先使用seek()方法(file.seek(start)
)。
答案 1 :(得分:0)
您需要先打开文件fileobj.seek(beginPos)
,然后fileobj.read(endPos-beginPos)
答案 2 :(得分:0)
你看过使用内存映射吗? (http://docs.python.org/library/mmap.html)
一旦你有了文件的内存映射,就可以像对待字符串(或列表)那样对其进行切片,而不必将整个文件读入内存。
如果你只想阅读一次文件的一部分,那可能是不必要的复杂性,但是你要做很多IO,它可以使管理更容易。
来自python docs:
import mmap
# write a simple example file
with open("hello.txt", "wb") as f:
f.write("Hello Python!\n")
with open("hello.txt", "r+b") as f:
# memory-map the file, size 0 means whole file
map = mmap.mmap(f.fileno(), 0)
# read content via standard file methods
print map.readline() # prints "Hello Python!"
# read content via slice notation
print map[:5] # prints "Hello"
# update content using slice notation;
# note that new content must have same size
map[6:] = " world!\n"
# ... and read again using standard file methods
map.seek(0)
print map.readline() # prints "Hello world!"
# close the map
map.close()