Сохранение данных в файл с помощью метода write

Раздел: Работа с файлами -> Работа с файлами

Особенности записи в файл методом write

Метод write вызывается у объекта файла, который возвращает функция open. В текстовом режиме write принимает строку, помещает её в файл с текущей позиции указателя и возвращает число записанных символов. В бинарном режиме аргументом служит объект bytes.

with open('result.txt', 'w', encoding='utf-8') as f:
    number = f.write('Первая строка\n')
    f.write('Вторая строка\n')
print(number)

Path python 2 (путь к python 2)

В коде создаётся файл result.txt. Режим w очищает существующий файл перед записью. Если файла не было, он будет создан. Конструкция with гарантирует вызов close, благодаря чему буфер записи освобождается и файл закрывается. Переменная number получает целочисленное значение длины записанной строки. Для строки 'Первая строка\n' оно равно 14.

Если вызвать write у файла, открытого в режиме чтения, появится исключение io.UnsupportedOperation. Запись возможна только в режимах, где указано право на запись: w, a, r+, w+ или a+.

with open('result.txt', 'r', encoding='utf-8') as f:
    f.write('Запись')

Python find directory (поиск директории)

io.UnsupportedOperation: not writable

File does not exist python (проверка существования файла)

Как дописать текст в конец файла без потери старого содержимого?

Режим a ставит указатель записи в конец файла. Это удобно для журналов и лог-файлов. Старые данные сохраняются.

with open('log.txt', 'a', encoding='utf-8') as f:
    f.write('Событие: запуск программы\n')

Python path configuration (конфигурация путей python)

Если в строке, передаваемой в write, нет символа переноса, следующая запись окажется на той же строке.

with open('log.txt', 'a', encoding='utf-8') as f:
    f.write('первая')
    f.write('вторая')

Python installation path (путь установки python)

перваявторая

Python path exists (проверка существования пути в python)

Как записать несколько строк из списка за один вызов?

Метод writelines принимает коллекцию строк и записывает элементы последовательно. Метод write в этом случае вызывается не для каждой строки вручную.

lines = ['один\n', 'два\n', 'три\n']
with open('list_file.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)

Python file in folder (проверка существования файла в папке)

Если строки уже содержат символ переноса, структура файла сохраняется.

Когда в элементах списка разделитель отсутствует, все элементы склеиваются.

lines = ['красный', 'синий']
with open('list_file.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)

запись данных python (запись данных в python)

красныйсиний

File parser python (парсинг файлов в python)

Как записать каждую строку с собственным разделителем?

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

items = ['пункт1', 'пункт2', 'пункт3']
with open('items.txt', 'w', encoding='utf-8') as f:
    for item in items:
        f.write(item + '\n')

Io python (ввод/вывод (io) в python)

В каких случаях print с параметром file удобнее write?

Функция print сама ставит символ новой строки в конце вывода. Параметр file направляет вывод в файл. Параметры sep и end управляют разделителями.

with open('settings.txt', 'w', encoding='utf-8') as f:
    print('Размер', 1024, sep=' = ', file=f)
    print('Режим', 'on', sep=': ', file=f)

ввод двух чисел python (ввод двух чисел в python)

Как сбросить буфер записи в файл до закрытия файла?

После вызова write данные могут ещё находиться в буфере. Метод flush принудительно передаёт их операционной системе. Это полезно для журналов, которые должны обновляться во время длительной работы программы.

with open('stream.log', 'a', encoding='utf-8') as f:
    f.write('Первая часть')
    f.flush()
    f.write('Вторая часть')

Python число строк в файле (подсчет количества строк в файле в python)

Как выбрать кодировку при записи текстового файла?

Функция open принимает параметр encoding. Для русского текста чаще всего выбирают utf-8 или cp1251. Указание кодировки делает файл читаемым в других приложениях.

with open('summary.txt', 'w', encoding='utf-8') as f:
    f.write('Итоговая сводка')

Python ввести число (ввод числа в python)

Если символ отсутствует в назначенной кодировке, возникает UnicodeEncodeError. Кодировка ascii не содержит кириллицы.

with open('summary_ascii.txt', 'w', encoding='ascii') as f:
    f.write('Итоговая сводка')

Python ввести переменную (ввод значения переменной в python)

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-13: ordinal not in range(128)

Python ввод вывод (ввод и вывод данных в python)

Как записать данные файла через pathlib без написания слова open?

Метод write_text класса Path создаёт файл и записывает в него строку. Кодировку передают параметром encoding. Файл закрывается автоматически, метод возвращает количество символов.

from pathlib import Path

path = Path('autosave.txt')
path.write_text('Автоматическое сохранение', encoding='utf-8')

ввод целого числа python (ввод целого числа)

Как записать бинарные данные и чем они отличаются от текстовых?

Бинарный режим wb используется для файлов, которые содержат байты: изображения, сжатые данные, сериализованные объекты. write в этом режиме получает bytes или bytearray.

with open('sample.bin', 'wb') as f:
    f.write(bytes([0, 127, 255, 10]))

Python ввести несколько чисел (ввод нескольких чисел с клавиатуры в python)

Текстовую строку для бинарного файла переводят в bytes с помощью encode.

text = 'кодированные данные'
with open('sample_bytes.txt', 'wb') as f:
    f.write(text.encode('utf-8'))

ввести символ в python (ввод символа в python)

Как заменить часть содержимого существующего файла?

Режим r+ открывает файл для чтения и записи. Метод seek переносит указатель на нужный байт, после чего write перезаписывает фрагмент с этого места.

with open('numbers.txt', 'w', encoding='utf-8') as f:
    f.write('123456789')
with open('numbers.txt', 'r+', encoding='utf-8') as f:
    f.seek(2)
    f.write('ABC')

Python input list (ввод списка с клавиатуры в python)

Файл станет содержать строку 12ABC6789. Позиция 2 соответствует третьему символу. При помощи write невозможно вставить новые символы в середину файла без сдвига остальных.

Режим r+ не создаёт новый файл. Если файл отсутствует, программа получит FileNotFoundError.

with open('missing.txt', 'r+', encoding='utf-8') as f:
    f.write('текст')

List input split python (ввод списка через split в python)

FileNotFoundError: [Errno 2] No such file or directory: 'missing.txt'
- Python вывести (вывод данных в python)
- вывести код python (вывод кода python)
- Python вывести сообщение на экран (вывести сообщение на экран в python)

Практические примеры записи в файл с результатом выполнения

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

Пример
with open('dimensions.txt', 'w', encoding='utf-8') as f:
    f.write('10x20\n')
    f.write('30x40\n')

with open('dimensions.txt', encoding='utf-8') as f:
    print(f.read())
10x20
30x40

Повторные вызовы write последовательно дополняют файл. После закрытия файла вся информация доступна для чтения.

Пример
lines = ['альфа\n', 'бета\n', 'гамма\n']
with open('sequence.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)

with open('sequence.txt', encoding='utf-8') as f:
    print(f.read())
альфа
бета
гамма

writelines не добавляет разделители. Поэтому каждый элемент коллекции должен включать символ новой строки.

Пример
with open('multiplication.txt', 'w', encoding='utf-8') as f:
    for i in range(1, 4):
        f.write(f'{i} умноженное на 2 равно {i * 2}\n')

with open('multiplication.txt', encoding='utf-8') as f:
    print(f.read())
1 умноженное на 2 равно 2
2 умноженное на 2 равно 4
3 умноженное на 2 равно 6

Цикл позволяет строить содержимое файла во время записи.

Пример
from pathlib import Path

path = Path('quick_write.txt')
path.write_text('Строка из pathlib', encoding='utf-8')

print(path.read_text(encoding='utf-8'))
Строка из pathlib

Метод write_text создаёт файл, записывает строку и закрывает его. Если файл уже существует, его содержимое заменяется.

Пример
with open('details.txt', 'w', encoding='utf-8') as f:
    print('Бренд:', 'Laptop', file=f)
    print('Цена:', 990, 'руб.', sep=' ', file=f)

with open('details.txt', encoding='utf-8') as f:
    print(f.read())
Бренд: Laptop
Цена: 990 руб.

Параметр file функции print создаёт в файле такой же текст, какой обычно появляется в консоли. В конце каждой выводимой строки добавляется перевод строки.

Пример
with open('steps.log', 'w', encoding='utf-8') as f:
    f.write('Шаг 1\n')
with open('steps.log', 'a', encoding='utf-8') as f:
    f.write('Шаг 2\n')
with open('steps.log', 'a', encoding='utf-8') as f:
    f.write('Шаг 3\n')

with open('steps.log', encoding='utf-8') as f:
    print(f.read())
Шаг 1
Шаг 2
Шаг 3

Режим a полезен для накопления записей в одном файле.

Пример
values = bytes([0, 15, 255, 10])
with open('raw.bin', 'wb') as f:
    written = f.write(values)

with open('raw.bin', 'rb') as f:
    restored = f.read()
print(written)
print(list(restored))
4
[0, 15, 255, 10]

Количество записанных байт совпадает с количеством элементов массива values. В байтовом режиме метод write работает с числами от 0 до 255.

Пример
with open('version.txt', 'w', encoding='utf-8') as f:
    f.write('Version: 1.0\nBuild: 5')

with open('version.txt', 'r+', encoding='utf-8') as f:
    f.readline()
    f.seek(len('Version: '))
    f.write('2.0')

with open('version.txt', encoding='utf-8') as f:
    print(f.read())
Version: 2.0
Build: 5

Метод seek перед write меняет положение указателя. В этом примере заменяется только номер версии, остальная часть файла остаётся прежней.

Пример
with open('count_symbols.txt', 'w', encoding='utf-8') as f:
    count = f.write('abc\n')
print(count)
4

Метод write подсчитывает символы и переводит строки. Один символ перевода строки также учитывается.

Запись в файл в Python (write) - comments

En
функция write python (python)