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") 
  • Как обновить статус FB с помощью Python & GraphAPI?
  • Создание списка из текстового файла в python
  • Простой код python о двойной петле
  • Почему я не могу загрузить видео в Microsoft Azure API и получить правильный заголовок местоположения?
  • Создайте случайный порядок (x, y) пар, не повторяя / последующие x
  • Скрыть папки / Файл с Python
  • Как динамически компоновать и получать доступ к атрибутам класса в Python?
  • Разделяйте имена первых, средних и фамилий (Python)
  • Отладка функции в python
  • Найдите индекс dict в списке, сопоставив значение dict
  • eval call lambda не видит себя
  •  
    Interesting Posts for Van-Lav

    Ошибка синтаксиса, выполняющая код python из базы данных

    Heroku TypeError: parse_requirements () отсутствует 1 требуемый аргумент ключевого слова: 'session'

    Получить Python для печати местоположения или получения

    df.duplicated () ложные срабатывания?

    Какой хороший способ заменить международных персонажей их базовыми латинскими аналогами с помощью Python?

    Как отменить кортежи в Python?

    NumPy или Pandas: сохранение типа массива как целого с использованием значения NaN

    Python pandas resample добавлены даты, отсутствующие в исходных данных

    Используя сборщик Django с помощью boto S3 через некоторое время «Ошибка 32: Сломанная труба»

    Где фляжка ищет файлы изображений?

    Рубиновый эквивалент virtualenv?

    Как разбить столбец DataFrame на python

    Поведение IPython отличается для файлов .py и .ipy, несмотря на то, что скрипт является «чистым» python (пользовательский крюк обработчика исключений перестает работать)

    dtype изменяется при использовании DataFrame.to_dict

    Python Script, args не передается скрипту

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