在python中读取用户给定起始位置和结束位置之间的文本文件

时间:2011-09-13 13:22:26

标签: python text file-io

我有一个巨大的文本文件,我想从中选择性地阅读几行。 使用tell()我知道我想要阅读的位置。

有没有办法可以在两个位置之间读取文件中的所有文字? 像file.read(beginPos,endPos)

或者,可能会读取包含beginPos的行号和包含endPos的行号之间的所有文本?

3 个答案:

答案 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()