Python print to file append

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

Когда вы открываете файл в режиме “для записи” (параметр ‘w’ функции open() ), при последующем сохранении данных в этот файл старые данные, уже сохраненные в нем, заменяются новыми. Но такое поведение требуется не всегда. В этой статье мы рассмотрим, как при помощи Python добавить текст в существующий файл.

Чтобы добавить текст в файл, сначала нужно открыть этот файл с режимом доступа ‘a’ (от англ. append – “добавлять, присоединять”):

file_object = open('sample.txt', 'a')

При режиме доступа к файлам ‘a’ функция open() сначала проверяет, существует ли файл. Если файл не существует, то она создает пустой файл и открывает его. Если же файл уже существует, то она открывает его.

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

Пробуем добавить текст в файл в Python

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

Hello this is a sample file It contains sample text This is the end of file

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

# Открыть файл с режимом доступа 'a' file_object = open('sample.txt', 'a') # Добавить'hello' в конец файла file_object.write('hello') # Закрыть файл file_object.close()

Теперь содержимое файла sample.txt выглядит так:

Hello this is a sample file It contains sample text This is the end of filehello

Мы открыли файл sample.txt в режиме добавления, т.е. используя режим доступа ‘a’ . Когда мы передали строку в функцию write() , она добавила ее в конец файла, поскольку курсор в файловом объекте указывал на него. Таким образом, наш текст ‘hello’ был добавлен в конец файла sample.txt.

Читайте также:  Glob python несколько расширений

Добавление текста в файл с помощью оператора with

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

# Открыть файл в режиме доступа 'a' with open("sample.txt", "a") as file_object: # Добавить 'hello' в конец файла file_object.write("hello")

Содержимое файла sample.txt после добавления строки:

Hello this is a sample file It contains sample text This is the end of filehellohello

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

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

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

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

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

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

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

Поэтому наш окончательный алгоритм действий должен быть таким:

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

Это решение будет работать в обоих сценариях. Давайте применим его на практике. Предположим, у нас есть файл sample2.txt со следующим содержимым:

Hello this is a sample file It contains sample text This is the end of file
# Открыть файл в режиме добавления и чтения ('a+') with open("sample2.txt", "a+") as file_object: # Переместить курсор чтения к началу файла file_object.seek(0) # Если файл не пуст, добавить '\n' data = file_object.read(100) if len(data) > 0 : file_object.write("\n") # Добавить текст в конец файла file_object.write("hello hi")

Примечание редакции: о функции seek можно почитать в статье “Файловые методы Python”.

Теперь содержимое файла sample2.txt выглядит так:

Hello this is a sample file It contains sample text This is the end of file hello hi

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

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

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

def append_new_line(file_name, text_to_append): """Добавление текста в виде новой строки в конец файла""" # Открыть файл в режиме добавления и чтения ('a+') with open(file_name, "a+") as file_object: # Переместить курсор чтения к началу файла file_object.seek(0) # Если файл не пуст, добавить '\n' data = file_object.read(100) if len(data) > 0: file_object.write("\n") # Добавить текст в конец файла file_object.write(text_to_append)

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

# Добавить одну строку к файлу, которого пока не существует append_new_line('sample3.txt', 'This is first line')

Создастся файл sample3.txt, а его содержимое будет таким:

Перед нашей строкой не добавлен переход на новую строку ( \n ), потому что файл был пуст.

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

# Добавить еще одну строку в уже существующий файл, в котором есть какое-то содержимое append_new_line('sample3.txt', 'This is second line')

Теперь содержимое файла sample3.txt будет следующим:

This is first line This is second line

Поскольку файл уже существует и имеет содержимое, сначала в него добавляется ‘\n’, а затем наша строка.

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

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

list_of_lines = ['First Line', 'Second Line', 'Third Line']

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

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

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

    В принципе, нам не нужно писать первое ‘\n’, если файл пуст.

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

    def append_multiple_lines(file_name, lines_to_append): # Открыть файл в режиме добавления и чтения ('a+') with open(file_name, "a+") as file_object: appendEOL = False # Переместить курсор чтения к началу файла file_object.seek(0) # Проверить, пуст ли файл data = file_object.read(100) if len(data) > 0: appendEOL = True # Перебрать все строки в списке for line in lines_to_append: # Если файл не пуст, добавить '\n' перед первой строкой # Для других строк всегда добавлять '\n' перед добавлением строки if appendEOL == True: file_object.write("\n") else: appendEOL = True # Добавить элемент в конец файла file_object.write(line)

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

    This is first line This is second line
    list_of_lines = ['First Line', 'Second Line', 'Third Line']

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

    # Добавить строки из списка в конец файла в виде отдельных строк append_multiple_lines('sample3.txt', list_of_lines)

    Теперь содержимое файла sample3.txt следующее:

    This is first line This is second line First Line Second Line Third Line

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

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

    def append_new_line(file_name, text_to_append): """Append given text as a new line at the end of file""" # Открыть файл в режиме добавления и чтения ('a+') with open(file_name, "a+") as file_object: # Переместить курсор чтения к началу файла file_object.seek(0) # Если файл не пуст, добавить '\n' data = file_object.read(100) if len(data) > 0: file_object.write("\n") # Добавить текст в конец файла file_object.write(text_to_append) def append_multiple_lines(file_name, lines_to_append): # Открыть файл в режиме добавления и чтения ('a+') with open(file_name, "a+") as file_object: appendEOL = False # Переместить курсор чтения к началу файла file_object.seek(0) # Проверить, пуст ли файл data = file_object.read(100) if len(data) > 0: appendEOL = True # Перебрать все строки в списке for line in lines_to_append: # Если файл не пуст, добавить '\n' перед первой строкой # Для других строк всегда добавлять '\n' перед добавлением строки if appendEOL == True: file_object.write("\n") else: appendEOL = True # Добавить элемент в конец файла file_object.write(line) def main(): print('Append a text to file in Python') # Открыть файл в режиме доступа 'a' file_object = open('sample.txt', 'a') # Добавить 'hello' в конец файла file_object.write('hello') # Закрыть файл file_object.close() print('Append a text to file in Python using "with statement"') # Открыть файл в режиме доступа 'a' with open("sample.txt", "a") as file_object: # Добавить'hello' в конец файла file_object.write("hello") print('Append data to a file as a new line in Python') # Открыть файл в режиме добавления и чтения ('a+') with open("sample2.txt", "a+") as file_object: # Переместить курсор чтения к началу файла file_object.seek(0) # Если файл не пуст, добавить '\n' data = file_object.read(100) if len(data) > 0 : file_object.write("\n") # Добавить текст в конец файла file_object.write("hello hi") # Добавить одну строку в несуществующий файл append_new_line('sample3.txt', 'This is first line') # Добавить еще одну строку в файл, который уже существует и имеет какое-то содержимое append_new_line('sample3.txt', 'This is second line') print('Append multiple lines to a file in Python') list_of_lines = ['First Line', 'Second Line', 'Third Line'] # Добавить строки из списка как отдельные новые строки в конец файла append_multiple_lines('sample3.txt', list_of_lines) if __name__ == '__main__': main()
    Append a text to file in Python Append a text to file in Python using "with statement" Append data to a file as a new line in Python Append multiple lines to a file in Python

    Источник

Оцените статью