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() 

2 Solutions collect form web for “Python: открыть файл, выполнить поиск, а затем добавить, если не существует.”

Чтобы оставить входной файл неизменным, если 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?

Вы можете установить текущую позицию файлового объекта с помощью 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") 
Python - лучший язык программирования в мире.