Для проекта я хранил данные в текстовом документе и заметил проблему при попытке получить эти данные обратно в сценарии. В частности, я использую метод readlines() для получения данных. Когда я использую его в первый раз, он работает просто отлично; однако в любое время после этого он возвращает пустой список, несмотря на то, что в документе ничего не меняется.
Я воспроизвел проблему с помощью этого небольшого фрагмента кода:
testDocRead = open("C:\\Users\\emowe\\OneDrive\\Desktop\\Python\\testDocument.txt", "r")
print(testDocRead.readlines()) # attempt 1
print(testDocRead.readlines()) # attempt 2
С первой попытки все работает как задумано. Он печатает:
['Filler\n', 'text\n', 'to\n', 'add\n', 'lines']
Вторая попытка просто печатает:
[]
Мои вопросы:
Объяснение в том, что когда вы открываете файл для чтения и используете первый testDocRead.readlines()
, он читает все строки; таким образом помещая указатель файла в конец файла.
Любые последующие readlines() ничего не дадут, так как конец файла.
Вам нужно сбросить указатель файла обратно в начало.
то есть
testDocRead = open("C:\\Users\\emowe\\OneDrive\\Desktop\\Python\\testDocument.txt", "r")
print(testDocRead.readlines()) # attempt 1
testDocRead.seek(0)
print(testDocRead.readlines()) # attempt 2
seek(0)
сбрасывает указатель файла обратно в начало файла.
Другой вариант, который вы также можете использовать, — закрыть файл и открыть его снова.
Это потому, что функция readlines() возвращает все строки файла в виде списка.
Если вы все еще хотите напечатать вывод дважды, напишите:
with open(path_name , 'r') as reader:
data = reader.readlines()
print(f"{data}\n{data}")
Или, если вы хотите печатать каждую строку одну за другой, используйте .readline
вместо .readlines
.
Наконец, вы также можете использовать метод .seek
для перезапуска функции readlines, установив для нее значение 0.
После первого readlines() вы уже достигли конца файла. Вам нужно сделать
testDocRead.seek(0)
, чтобы перейти к началу.