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") 
Interesting Posts

Проверка JQuery – проверка доступности электронной почты и имени пользователя с сервера Django

Как инициализировать переменные в None / Undefined и сравнивать с другими переменными в Python?

как выбрать случайную строку из текстового файла

Сравнение двух различий отчетов в python

Почему я получаю неправильные результаты для hmac в Python, но не Perl?

Получить массив строк из запроса Pymongo

Python – печатать элементы кортежа без скобок

Указание виджета для дополнительного поля формы модели (Django)

webapp2 – Как отменить URL в шаблонах?

Обтекание пользовательского типа указателем C ++ в Cython

зацикливание некоторого ips из файла в python?

Свернуть несколько подмодулей на одно расширение Cython

Почему я не могу присоединиться к этому кортежу в Python?

lxml XMLSyntaxError: префикс по умолчанию для пространства имен не найден

Заполните пропущенные значения с ближайшим соседом в масках в масках в макете Python?

Python - лучший язык программирования в мире.