Указатель на начало любой строки

361 просмотра
0
0 Комментариев

Пишу программу для работы с текстовыми файлами. Столкнулся с проблемой:
В файле я нахожу строки, которые содержат ключевые слова, символы. Типа [H009], [A008], Name= и т.д.
Но дело в том, что мне нужно записать новую строку сразу после найденного слова, пока что не могу догадаться как реализовать поиск нужного кол-ва байтов на переход указателя seek(x).


Добавить комментарий

1 Ответы

Python Опубликовано 14.12.2018
0

Если файл небольшого размера, то можно поступить проcто и воспользоваться методом readlines(). Если держать файл в памяти целиком желания нет, то

для того, чтобы иметь возможность переходить на начало любой произвольной строки в файле, его необходимо полностью прочитать и составить специальный индекс. Индекс будет представлять из себя массив, где номер элемента — это номер строки в файле, а сам элемент — это смещение первого символа в этой строке. Единственное, что вас может подстерегать на этом пути, так это то, что на Windows могут обрезаться /r/n символы:

lines_index = []
 
with open("test_file", 'r', buffering=1, encoding="utf8") as file:
    while file.readline():
        lines_index.append(file.tell())
 
    file.seek(lines_index[5])
    print(file.readline())  # Прочитать шестую строку

Решение с while file.readline() кроссплатформенное (в отличие от for line in file).

Также стоит отметить, что file.tell() возвращает «непрозрачное значение» (io.TextIOBase.tell, Methods of file objects), которое можно использовать в методе seek, а не количество прочитанных символов.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up