Файл открыт в режиме добавления, какая строка кода правильная

Обновлено: 02.07.2024

Как дополнить файл, а не перезаписать его? Есть ли специальная функция, которая добавляет файл?

13 ответов 13

Этого можно добиться, установив в open() режим "a" (добавление) вместо "w" (запись). См. документацию op open() для всех доступных режимов.

bluewoodtree: преимущества аналогичны преимуществам RAII в C++. Если вы забудете close(), может пройти некоторое время, прежде чем файл будет действительно закрыт. Легче, чем вы думаете, забыть об этом, когда код имеет несколько точек выхода, исключений и т. д.

Существует функциональная разница, помимо того, что нужно помнить о закрытии. with открывает диспетчер контекста, который закроет файл, даже если между открытием и закрытием() возникнет ошибка.

Можно легко использовать open("test.txt") как myfile: myfile.write("appened text",'a') , но в open требуется a.

Вам нужно открыть файл в режиме добавления, установив режим "a" или "ab". См. open().

При открытии в режиме "a" позиция записи всегда будет в конце файла (дополнение). Вы можете открыть с помощью «+», чтобы разрешить чтение, поиск назад и чтение (но все операции записи все равно будут в конец файла!).

Примечание. Использование «a» — это не то же самое, что открытие с помощью «w» и поиск в конец файла. Подумайте, что может произойти, если другая программа откроет файл и начнет запись между поиском и записью. В некоторых операционных системах открытие файла с помощью 'a' гарантирует, что все ваши последующие операции записи будут атомарно добавлены в конец файла (даже если файл увеличивается за счет других операций записи).

Еще несколько подробностей о том, как работает режим "a" (проверено только на Linux). Даже если вы вернетесь назад, каждая запись будет добавляться в конец файла:

На самом деле, на странице руководства fopen указано:

Открытие файла в режиме добавления (a в качестве первого символа режима) приводит к тому, что все последующие операции записи в этот поток выполняются в конце файла, как если бы они предшествовали вызову:

Старый упрощенный ответ (не используется с ):

Пример: (в реальной программе используйте with для закрытия файла — см. документацию)

В этой статье мы обсудим, как добавить текст или новые строки в существующий файл с помощью Python.


Чтобы добавить какой-либо текст в файл в конце, нам сначала нужно открыть файл с режимом доступа «a»,

В режиме доступа к файлу «a» функция open() сначала проверяет, существует ли файл. Если файл не существует, то он создает пустой файл и открывает его. Принимая во внимание, что если файл уже существует, он открывает его. В обоих случаях он возвращает файловый объект и имеет курсор записи, указывающий на конец открытого файла. Теперь, если вы что-нибудь напишете в файл, используя этот файловый объект, оно будет добавлено в конец.

Давайте воспользуемся этим, чтобы добавить текст в конец файла,

Добавить текст в файл в Python

Предположим, у нас есть файл «sample.txt», и его содержимое:

Теперь добавим текст 'hello' в конец этого файла,

Содержимое файла «sample.txt» теперь будет,

Мы открыли файл «sample.txt» в режиме добавления, т. е. с использованием режима доступа «a». Поскольку курсор указывал на конец файла в файловом объекте, поэтому, когда мы передавали строку в функцию write(), она добавлялась в конец файла. Итак, наш текст «привет» добавляется в конец файла «sample.txt».

Добавить текст в файл в Python, используя оператор with open

Мы можем открыть файл в режиме доступа с добавлением, т. е. ‘a’, также используя оператор with open, а затем мы можем добавить текст в конец файла.
Например,

Содержимое файла «sample.txt» теперь будет,

Текст «привет» снова добавляется в конец файла «sample.txt».
Основное отличие этого подхода от предыдущего заключалось в том, что нам не нужно явно закрывать файл. Он автоматически закрывается, когда блок выполнения «с оператором» заканчивается.

В обоих приведенных выше примерах текст добавляется в конец файла. Но, как мы видим, он не добавляется как новая строка. Могут быть сценарии, когда мы хотим добавить данные в файл в виде новой строки.
Давайте посмотрим, как это сделать

Добавить данные в файл в виде новой строки в Python

Решение здесь немного сложное. давайте начнем с базового подхода, а затем обсудим его недостатки и посмотрим, как его улучшить,

  • Откройте файл в режиме добавления ("a"). Курсор указывает на конец файла.
  • Добавить ‘\n’ в конец файла с помощью функции write()
  • Добавить указанную строку в файл с помощью функции write().
  • Закройте файл

Ну, этот подход отлично работает, если наш файл уже существует и в нем уже есть некоторые данные. Но если файл не существует или файл пуст, то этот подход не работает, потому что содержимое файла будет таким,

Сначала он записывает пустую строку, а затем нашу строку. Но в данном случае нормально было только добавление строки, нам не нужно было писать ‘\n’ перед этим.

Итак, наш окончательный подход должен быть таким,

  • Откройте файл в режиме добавления и чтения ("a+"). Курсор чтения и записи указывает на конец файла.
  • Переместите курсор чтения в начало файла.
  • Прочитайте текст из файла и проверьте, пуст файл или нет.
  • Если файл не пустой, добавьте ‘\n’ в конец файла с помощью функции write().
  • Добавить заданную строку в файл с помощью функции write().
  • Закройте файл

Это решение будет работать в обоих случаях. Давайте воспользуемся этим решением для добавления новой строки в конец файла.

Предположим, у нас есть файл «sample2.txt» со следующим содержимым,

Добавить новую строку в файл,

Содержимое файла ‘sample2.txt’ сейчас,

В конец файла добавляется новая строка.

Режим доступа к файлу «a+» создает файл, который открывается как для чтения, так и для записи. Также, если файла не существует, то он тоже создает файл.
Изначально курсоры чтения и записи будут указывать на конец файла. Мы переместили курсор чтения в начало файла, чтобы проверить, является ли файл пустым или нет.
Если файл не пустой, сначала добавьте «\n» в конец файла, а затем добавьте строку.

Давайте переместим код в отдельную функцию,

Давайте воспользуемся этой функцией, чтобы добавить еще одну строку в несуществующий файл

Содержимое файла «sample3.txt» теперь будет,

Подтверждает, что перед записью новой строки не было добавлено "\n", поскольку файл уже был пуст.

Теперь давайте снова добавим еще одну строку в тот же файл, чтобы проверить, нормально ли он работает,

Содержимое файла «sample3.txt» теперь будет,

Поскольку файл уже существует и имеет содержимое; поэтому он сначала добавил «\n» в файл, а затем нашу заданную строку.

Добавить несколько строк в файл в Python

Предположим, у нас есть список строк,

Теперь мы хотим добавить каждый элемент в список в виде строки в файле. Как это сделать?

Мы могли бы сделать это, вызвав созданную выше функцию append_new_line() несколько раз, но это не оптимизированное решение, поскольку оно будет открывать и закрывать файл для каждого элемента в списке.
Мы должны открыть файл только один раз и добавить в него все строки. Для этого наш алгоритм должен выглядеть так:

  • Откройте файл в режиме добавления и чтения ("a+"). Курсор чтения и записи указывает на конец файла.
  • Переместите курсор чтения в начало файла.
  • Прочитайте текст из файла и проверьте, пуст файл или нет.
  • Если файл не пустой, установите для appendEOL значение True, иначе False
  • Теперь для каждого элемента в списке
    • Если его первый элемент в List и appendEOL имеет значение False
      • Не добавляйте «\n» в конец файла с помощью функции write().
      • Добавить ‘\n’ в конец файла с помощью функции write().

      По сути, нам не нужно сначала писать ‘\n’, если файл пуст.

      Функция для добавления нескольких строк в файл

      Теперь воспользуемся этой функцией.
      Предположим, что содержимое файла «sample3.txt» следующее:

      У нас есть список строк,

      Добавить все строки в этом списке отдельными строками в конец файла «sample3.txt»

      Теперь содержимое файла «sample3.txt» такое,

      Он добавил все строки в заданном списке в качестве новых строк в файле.

      Полный пример выглядит следующим образом:

      Учебники по Pandas – изучите анализ данных с помощью Python

      Вы хотите сделать карьеру в области Data Science с помощью Python?

      Наука о данных — это будущее, и оно уже наступило. На сегодняшний день специалисты по данным являются самыми востребованными профессионалами. Чтобы стать хорошим Data Scientist или сменить профессию в Data Science, нужно обладать нужным набором навыков. Мы составили список лучших профессиональных сертификатов в области науки о данных с помощью Python. Эти курсы научат вас инструментам программирования для науки о данных, таким как Pandas, NumPy, Matplotlib, Seaborn, и тому, как использовать эти библиотеки для реализации моделей машинного обучения.

      Ознакомьтесь с подробным обзором лучшего профессионального сертификата по науке о данных с Python.

      Помните, что наука о данных требует большого терпения, настойчивости и практики. Итак, начните учиться сегодня.

      Присоединяйтесь к сообществу разработчиков Python в LinkedIn

      Похожие записи

      Как добавить столбцы в массив NumPy в Python

      Как объединить массивы NumPy в Python?

      Добавить строку в массив NumPy в Python

      Добавить элементы в конец массива в Python

      Как удалить столбцы из массива NumPy

      Как удалить строки из массива NumPy

      Удалить последний элемент из массива NumPy в Python

      Удалить первый элемент из массива NumPy в Python

      Проверьте, является ли двумерный массив NumPy или матрица симметричным

      Редактировать значения ячеек в CSV-файлах с помощью Pandas в Python

      Сортировка массива NumPy в порядке убывания в Python

      Преобразование списка в набор в Python

      Добавление двух элементов списка в Python

      Добавление одного списка к другому списку в Python

      Удалить дубликаты из массива NumPy в Python

      Проверить, существует ли столбец в Pandas DataFrame

      Проверить, равны ли два массива NumPy в Python

      Pandas: проверьте, все ли значения в столбце равны нулю

      Проверить, все ли значения в столбце являются NaN в Pandas

      Pandas — проверьте, равны ли все значения в столбце

      2 мысли о «Как добавить текст или строки в файл в python?»

      Спасибо. Ваш урок потрясающий!

      Большое спасибо! Это очень помогло.

      Оставить комментарий Отменить ответ

      Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.

      Реклама

      Реклама

      Последние публикации

      Учебники по Python

      Что-то ищу

      Учебники по C++/C++11

      Условия использования

      Условия и политика

      Учебники по Python

      Избранные сайты

      Отказ от ответственности

      Условия и политика

      Авторское право © 2022 thisPointer

      Техническое хранение или доступ строго необходимы для законной цели предоставления возможности использования конкретной услуги, явно запрошенной подписчиком или пользователем, или с единственной целью осуществления передачи сообщения по сети электронной связи.

      Техническое хранение или доступ необходимы для законных целей хранения настроек, которые не запрашиваются подписчиком или пользователем.

      Техническое хранилище или доступ, которые используются исключительно в статистических целях. Техническое хранилище или доступ, который используется исключительно для анонимных статистических целей. Без повестки в суд, добровольного согласия со стороны вашего интернет-провайдера или дополнительных записей от третьей стороны информация, хранящаяся или извлекаемая только для этой цели, обычно не может быть использована для вашей идентификации.

      Техническое хранилище или доступ необходимы для создания профилей пользователей для отправки рекламы или отслеживания пользователя на веб-сайте или на нескольких веб-сайтах в аналогичных маркетинговых целях.

      Техническое хранение или доступ строго необходимы для законной цели предоставления возможности использования конкретной услуги, явно запрошенной подписчиком или пользователем, или с единственной целью осуществления передачи сообщения по сети электронной связи.

      Техническое хранение или доступ необходимы для законных целей хранения настроек, которые не запрашиваются подписчиком или пользователем.

      Техническое хранилище или доступ, которые используются исключительно в статистических целях. Техническое хранилище или доступ, который используется исключительно для анонимных статистических целей. Без повестки в суд, добровольного согласия со стороны вашего интернет-провайдера или дополнительных записей от третьей стороны информация, хранящаяся или извлекаемая только для этой цели, обычно не может быть использована для вашей идентификации.

      Техническое хранилище или доступ необходимы для создания профилей пользователей для отправки рекламы или отслеживания пользователя на веб-сайте или на нескольких веб-сайтах в аналогичных маркетинговых целях.

      Существует негласный консенсус в отношении того, что Python является одним из лучших языков программирования для новичков. Он чрезвычайно универсален, легко читается/анализируется и довольно приятен для глаз. Язык программирования Python хорошо масштабируется и считается одним из лучших наборов инструментов для создания инструментов и утилит, которые вы можете использовать по разным причинам.

      В этой статье кратко рассказывается, как Python обрабатывает один из самых важных компонентов любой операционной системы: ее файлы и каталоги. К счастью, в Python есть встроенные функции для создания файлов и управления ими, будь то простые файлы или текстовые файлы. Модуль io является модулем по умолчанию для доступа к файлам, поэтому нам не нужно будет импортировать какую-либо внешнюю библиотеку для общих операций ввода-вывода.

      Открытие файлов с помощью open()

      Эта функция возвращает файловый объект с именем "дескриптор", который используется для чтения и записи в файл. Аргументы, которые может получить функция, следующие:

      Обычно требуются только параметры имени файла и режима, в то время как остальные используются неявно заданными значениями по умолчанию.

      В следующем фрагменте кода показано, как можно использовать эту функцию:

      Это откроет текстовый файл с именем TestingText в режиме только для чтения. Обратите внимание, что был указан только параметр имени файла, это связано с тем, что режим «чтения» является режимом по умолчанию для функции открытия.

      Для функции open() доступны следующие режимы доступа:

      • r : открывает файл в режиме только для чтения.Начинает чтение с начала файла и является режимом по умолчанию для функции open().
      • rb : открывает файл только для чтения в двоичном формате и начинает чтение с начала файла. Хотя двоичный формат можно использовать для разных целей, он обычно используется при работе с такими вещами, как изображения, видео и т. д.
      • r+ : открывает файл для чтения и записи, помещая указатель в начало файла.
      • w : открывается в режиме только для записи. Указатель помещается в начало файла, и это перезапишет любой существующий файл с таким же именем. Он создаст новый файл, если файл с таким именем не существует.
      • wb : открывает файл только для записи в двоичном режиме.
      • w+ : открывает файл для записи и чтения.
      • wb+ : открывает файл для записи и чтения в двоичном режиме.
      • a : открывает файл для добавления к нему новой информации. Указатель помещается в конец файла. Новый файл создается, если файл с таким именем не существует.
      • ab : открывает файл для добавления в двоичном режиме.
      • a+ : открывает файл как для добавления, так и для чтения.
      • ab+ : открывает файл для добавления и чтения в двоичном режиме.

      Если исполняемый файл Python и целевой файл для чтения не существуют в одном и том же каталоге, нам нужно передать полный путь к файлу для чтения в функцию open(), как показано в следующем коде. фрагмент:

      Примечание. Следует всегда помнить, что имя файла и указанный путь верны. Если какой-либо из них неверен или не существует, будет выдана ошибка FileNotFoundError, которая затем должна быть перехвачена и обработана вашей программой, чтобы предотвратить ее сбой.

      Чтобы избежать этой проблемы, рекомендуется перехватывать ошибки с помощью блока try-finally для обработки исключения, как показано ниже.

      Чтение из файлов с помощью read()

      Python содержит 3 функции для чтения файлов: read() , readline() и readlines() . Последние две функции являются просто вспомогательными функциями, упрощающими чтение файлов определенных типов.

      Для примеров, которые будут использоваться, "TestingText.txt" содержит следующий текст:

      Метод чтения используется следующим образом:

      Вывод будет следующим:

      Примечание. Специальные символы могут быть неправильно прочитаны с помощью функции чтения. Чтобы правильно читать специальные символы, вы можете передать параметр encoding функции read() и установить его значение в utf8, как показано ниже:

      Кроме того, функция read() , как и вспомогательная функция readline() , может получать число в качестве параметра, который будет определять количество байтов для чтения из файла. В случае текстового файла это будет количество возвращаемых символов.

      Бесплатная электронная книга: Git Essentials

      Ознакомьтесь с нашим практическим руководством по изучению Git, включающим передовые практики, общепринятые стандарты и памятку. Перестаньте гуглить команды Git и на самом деле изучите их!

      Вывод будет следующим:

      Вспомогательная функция readline() ведет себя аналогичным образом, но возвращает не весь текст, а одну строку.

      В приведенном выше скрипте первый оператор print() возвращает первую строку и вставляет пустую строку в консоль вывода. Следующий оператор print() отделяется от предыдущей строки пустой строкой и начинается с новой строки, как показано в выводе:

      Наконец, вспомогательная функция readlines() считывает весь текст и разбивает его на строки для удобства чтения. Взгляните на следующий пример:

      Вывод этого кода будет таким:

      Имейте в виду, что функция readlines() считается намного медленнее и неэффективнее, чем функция read(), и не имеет особых преимуществ. Хорошей альтернативой этому является использование цикла, который будет работать намного плавнее и быстрее:

      Обратите внимание, что если строка не напечатана, она будет заменена в буфере следующим оператором

      Запись в файлы с помощью write()

      При использовании этой функции любая информация внутри файла с таким же именем будет перезаписана. Ее поведение похоже на функцию read(), но она вставляет информацию, а не читает ее.

      Если необходимо записать несколько строк, вместо этого можно использовать подфункцию writelines():

      Примечание: чтобы иметь возможность использовать функцию print(), режим должен быть установлен как w+ , что позволяет читать, а также писать.

      Добавление в файлы с помощью append()

      Эта функция действует аналогично функции write(), однако вместо перезаписи файла функция append() добавляет содержимое в существующий файл.

      Если текстовый файл с именем "TestingTextThree" содержит следующую информацию:

      Чтобы добавить новый текст, можно использовать следующий код:

      Вывод будет следующим:

      Закрытие открытых файлов с помощью close()

      Функция close() очищает буфер памяти и закрывает файл.Это означает, что мы больше не сможем читать из файла, и нам придется заново открывать его, если мы хотим прочитать из него снова. Кроме того, некоторые операционные системы, такие как Windows, рассматривают открытые файлы как заблокированные, поэтому важно очистить код после себя.

      Используя ранее использовавшийся образец кода, эта функция используется следующим образом:

      Заключение

      Python — один из самых надежных языков программирования, а также один из наиболее часто используемых. Его легко внедрить и проанализировать, что делает его идеальным инструментом для начинающих программистов. Кроме того, его универсальность делает его идеальной отправной точкой для новичков в программировании.

      Что касается обработки файлов, в Python есть простые в использовании функции с малым временем отклика и относительно гибкие методы обработки ошибок, поэтому процессы разработки и отладки намного проще, чем в других языках, когда дело доходит до работы с файлами. файлы.

      Читайте также: