Python: открыть файл, выполнить поиск, а затем добавить, если не существует.
Я пытаюсь добавить строку в файл, если строка не выходит из файла. Однако открытие файла с параметром a+
не позволяет мне делать сразу, потому что открытие файла с помощью a+
поместит указатель в конец файла, что означает, что мой поиск всегда терпит неудачу. Есть ли какой-нибудь хороший способ сделать это, кроме открытия файла, чтобы читать сначала, закрывать и открывать снова, чтобы добавить?
В коде, видимо, ниже не работает.
file = open("fileName", "a+")
Мне нужно сделать следующее для его достижения.
file = open("fileName", "r")
... check if a string exist in the file
file.close()
... if the string doesn't exist in the file
file = open("fileName", "a")
file.write("a string")
file.close()
Ответы
Ответ 1
Чтобы оставить входной файл без изменений, если needle
находится в любой строке или добавить иглу в конце файла, если она отсутствует:
with open("filename", "r+") as file:
for line in file:
if needle in line:
break
else: # not found, we are at the eof
file.write(needle) # append missing data
Я тестировал его и работает как на Python 2 (на основе ввода-вывода на основе stdio), так и на Python 3 (POSIX-чтение/запись на основе ввода-вывода).
В коде используется скрытый else
после синтаксиса Python цикла. См. Почему python использует "else" после циклов while и while?
Ответ 2
Вы можете установить текущую позицию файлового объекта с помощью file.seek()
. Чтобы перейти к началу файла, используйте
f.seek(0, os.SEEK_SET)
Чтобы перейти к концу файла, используйте
f.seek(0, os.SEEK_END)
В вашем случае, чтобы проверить, содержит ли файл что-нибудь, а затем, возможно, добавить append в файл, я бы сделал что-то вроде этого:
import os
with open("file.txt", "r+") as f:
line_found = any("foo" in line for line in f)
if not line_found:
f.seek(0, os.SEEK_END)
f.write("yay, a new line!\n")