f.seek() и f.tell() для чтения каждой строки текстового файла

Я хочу открыть файл и прочитать каждую строку, используя f.seek() а также f.tell():

test.txt:

abc
def
ghi
jkl

Мой код:

f = open('test.txt', 'r')
last_pos = f.tell()  # get to know the current position in the file
last_pos = last_pos + 1
f.seek(last_pos)  # to change the current position in a file
text= f.readlines(last_pos)
print text

Читает весь файл.

4 ответа

Решение

Хорошо, вы можете использовать это:

f = open( ... )

f.seek(last_pos)

line = f.readline()  # no 's' at the end of `readline()`

last_pos = f.tell()

f.close()

просто помни, last_pos это не номер строки в вашем файле, это смещение в байтах от начала файла - нет смысла увеличивать / уменьшать его.

Есть ли какая-то причина, почему вы должны использовать f.tell и f.seek? Файловый объект в Python является итеративным - это означает, что вы можете циклически перебирать строки файла, не беспокоясь о многом другом:

with open('test.txt','r') as file:
    for line in file:
        #work with line

Пропуск строк с помощью islice отлично работает для меня и выглядит ближе к тому, что вы ищете (переход к определенной строке в файле):

from itertools import islice

with open('test.txt','r') as f:
    f = islice(f, last_pos, None)
    for line in f:
        #work with line

Где last_pos - строка, которую вы перестали читать в последний раз. Итерация начнется через одну строку после last_pos.

Способ получения текущей позиции Когда вы хотите изменить определенную строку файла:

cp = 0 # current position

with open("my_file") as infile:
    while True:
        ret = next(infile)
        cp += ret.__len__()
        if ret == string_value:
            break
print(">> Current position: ", cp)
Другие вопросы по тегам