Write: примеры (PYTHON)

Использование функции write в Python для записи файлов
Раздел: Файлы, Ввод/вывод
write(s): int

Функция write в Python: основы работы

Метод write() в Python предназначен для записи данных в файловый объект. Эта операция применяется к объектам, поддерживающим запись, таким как обычные файлы, открытые в соответствующих режимах, или объекты ввода-вывода в памяти.

Функция используется при необходимости добавить строку или байты в файл. Она не добавляет символ новой строки автоматически, в отличие от метода print(). Это позволяет точно контролировать формат выводимых данных.

Синтаксис метода: file.write(string), где string - строка или байты для записи.

Параметры:

  • string - обязательный аргумент, принимает строку (для текстовых файлов) или объект bytes (для бинарных файлов).

Возвращаемое значение:

  • Метод возвращает целое число - количество записанных символов (для текстового режима) или байт (для бинарного режима).

Базовые примеры использования write

Запись строки в новый файл:

with open('example.txt', 'w') as f:
    result = f.write('Привет, мир!')
    print(f'Записано символов: {result}')
Записано символов: 12

Запись нескольких строк с явным добавлением символа новой строки:

with open('lines.txt', 'w') as f:
    f.write('Первая строка\n')
    f.write('Вторая строка\n')
    f.write('Третья строка')

Содержимое файла lines.txt:

Первая строка
Вторая строка
Третья строка

Работа с бинарными файлами:

with open('data.bin', 'wb') as f:
    bytes_written = f.write(b'\x00\x01\x02\x03')
    print(f'Записано байт: {bytes_written}')
Записано байт: 4

Альтернативные функции для записи в Python

  • print() с параметром file - удобен для форматированного вывода, автоматически добавляет разделители и символ новой строки. Предпочтителен для записи отформатированных данных.
  • writelines() - принимает итерируемый объект со строками, но не добавляет символы новой строки между элементами. Эффективен для записи подготовленного списка строк.
  • io.StringIO и io.BytesIO - классы для работы со строковыми и бинарными буферами в памяти. Используются, когда требуется работа с данными как с файлом, но без физического сохранения на диск.

Аналоги функции write в других языках

JavaScript (Node.js):

const fs = require('fs');
fs.writeFileSync('file.txt', 'Текст');
// или асинхронно:
fs.writeFile('file.txt', 'Текст', (err) => {});

Отличие: в Node.js часто используются асинхронные методы.

Java:

import java.nio.file.*;
Files.write(Paths.get("file.txt"), "Текст".getBytes());
// или с помощью FileWriter
FileWriter writer = new FileWriter("file.txt");
writer.write("Текст");
writer.close();

Отличие: необходимо явно закрывать поток или использовать try-with-resources.

PHP:

file_put_contents('file.txt', 'Текст');
// или с помощью fopen/fwrite
$file = fopen('file.txt', 'w');
fwrite($file, 'Текст');
fclose($file);

Отличие: функция file_put_contents записывает сразу всю строку.

C#:

File.WriteAllText("file.txt", "Текст");
// или с помощью StreamWriter
using (StreamWriter writer = new StreamWriter("file.txt"))
{
    writer.Write("Текст");
}

Отличие: использование using для автоматического освобождения ресурсов.

Golang:

import "os"
err := os.WriteFile("file.txt", []byte("Текст"), 0644)
// или поэтапно
file, _ := os.Create("file.txt")
defer file.Close()
file.WriteString("Текст")

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

Распространенные ошибки при работе с write

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

with open('readonly.txt', 'r') as f:
    f.write('Текст')
io.UnsupportedOperation: not writable

Забывают кодировать строки при работе с бинарным режимом:

with open('data.bin', 'wb') as f:
    f.write('Текст')
TypeError: a bytes-like object is required, not 'str'

Исправление:

with open('data.bin', 'wb') as f:
    f.write('Текст'.encode())

Не учитывается возвращаемое значение:

with open('large.txt', 'w') as f:
    written = f.write('a' * 10000)
    print(f'Фактически записано: {written} символов')
Фактически записано: 10000 символов

Изменения в работе функции write

Значительных изменений в методе write() для файловых объектов в последних версиях Python не произошло. Основные изменения связаны с улучшением производительности и обработкой ошибок. Начиная с Python 3.x, метод всегда возвращает количество записанных символов или байтов, что является стабильным поведением.

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

Расширенные примеры применения write

Постепенная сборка файла большого объема:

Пример python
chunks = ['Часть1', 'Часть2', 'Часть3']
total_written = 0
with open('bigfile.txt', 'w') as f:
    for chunk in chunks:
        written = f.write(chunk)
        total_written += written
        print(f'Добавлено {written} символов')
    print(f'Всего записано: {total_written}')
Добавлено 6 символов
Добавлено 6 символов
Добавлено 6 символов
Всего записано: 18

Запись в буфер в памяти с использованием io.StringIO:

Пример python
import io
buffer = io.StringIO()
buffer.write('Строка в ')
buffer.write('буфере памяти')
result = buffer.getvalue()
print(f'Содержимое буфера: {result}')
print(f'Длина: {len(result)}')
Содержимое буфера: Строка в буфере памяти
Длина: 23

Запись данных с помощью пользовательского буфера для повышения производительности:

Пример python
data = ['Строка {}\n'.format(i) for i in range(1000)]
with open('optimized.txt', 'w') as f:
    for line in data:
        f.write(line)  # Каждый вызов write - системный вызов

Более эффективный вариант с буферизацией:

Пример python
data = ['Строка {}\n'.format(i) for i in range(1000)]
with open('optimized2.txt', 'w') as f:
    buffer = ''
    for line in data:
        buffer += line
        if len(buffer) >= 4096:  # Записываем блоком по 4K
            f.write(buffer)
            buffer = ''
    if buffer:  # Записываем остаток
        f.write(buffer)

Использование write с различными кодировками:

Пример python
with open('utf16_example.txt', 'w', encoding='utf-16-le') as f:
    written = f.write('Пример текста')
    print(f'Записано символов: {written}')
Записано символов: 13

питон write function comments

En
Write Write string to stream