Прочитать текстовый файл между пользователем заданной начальной и конечной позиции в Python - PullRequest
2 голосов
/ 13 сентября 2011

У меня огромный текстовый файл, из которого я хочу выборочно прочитать несколько строк.Используя tell (), я знаю позиции, которые я хочу прочитать между.

Есть ли способ, которым я могу прочитать весь текст в файле между двумя позициями?например, file.read (beginPos, endPos)

или, возможно, прочитать весь текст между номером строки, содержащей beginPos, и номером строки, содержащим endPos?

Ответы [ 3 ]

5 голосов
/ 13 сентября 2011

Если у вас сейчас начальная точка (с tell()) и конечная точка, вы можете просто сделать file.read(end-start), она будет читать end-start байтов.Если в начале вы смещены неверно, сначала используйте метод seek () (file.seek(start)).

0 голосов
/ 13 сентября 2011

Вы смотрели на использование карт памяти? (http://docs.python.org/library/mmap.html)

Когда у вас есть карта памяти файла, вы можете нарезать ее, как строку (или список), не считывая весь файл в память.

Это может быть ненужной сложностью, если вы собираетесь читать только один раздел файла один раз, но если вы собираетесь выполнять много операций ввода-вывода, это может значительно облегчить управление.

из документации по питону:

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()
0 голосов
/ 13 сентября 2011

Вы захотите открыть файл, затем fileobj.seek(beginPos), а затем fileobj.read(endPos-beginPos)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...