Сохранение данных в файл с помощью метода 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'
Практические примеры записи в файл с результатом выполнения
В каждом примере код снабжён кратким пояснением. Если после записи файл снова открывается для чтения, результат показан в поле 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 подсчитывает символы и переводит строки. Один символ перевода строки также учитывается.