Python: работа с файлами (чтение, запись, добавление)
Основные методы файлового ввода-вывода
Как организовать безопасную и эффективную работу с файлами?
Наиболее надёжный способ – использование менеджера контекста with. Он автоматически закрывает файл даже при возникновении исключений.
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)ввод программ на python (ввод данных в программе python)
Такой код гарантирует освобождение ресурсов. Для записи используется режим 'w' или 'a'.
Типичные ошибки:
- FileNotFoundError – файл не существует. Проверьте путь или создайте файл заранее.
- UnicodeDecodeError – неверная кодировка. Укажите правильный параметр encoding.
- Забывают закрыть файл при использовании open() без with – приводит к утечке дескрипторов.
Как прочитать файл целиком одной строкой?
Для небольших файлов подходит метод read() без аргументов – возвращает всё содержимое как строку.
f = open('data.txt', 'r')
data = f.read()
f.close()
print(data[:50])Python file io (ввод-вывод файлов в python)
Минус: файл не закрывается автоматически при ошибке. Лучше использовать with.
Если файл слишком велик, read() загрузит его целиком в память, что может привести к MemoryError.
Как построчно обрабатывать большой файл?
Используйте цикл по файловому объекту – он читает строки лениво, экономя память.
with open('big_log.txt', 'r', encoding='utf-8') as f:
for line in f:
if 'ERROR' in line:
print(line.strip())
Python temp files (временные файлы в python)
Каждая итерация возвращает одну строку (включая символ новой строки).
Не забывайте удалять символ новой строки с помощью strip(), если это необходимо.
Как записать список строк в файл?
Метод writelines() принимает итерируемый объект, но не добавляет символы конца строки автоматически. Нужно добавлять их в данные.
lines = ['Строка 1\n', 'Строка 2\n', 'Строка 3']
with open('output.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)Python index files (индексация файлов в python)
Для записи одной строки используйте write().
Если забыть '\n', все строки сольются в одну.
Как дописать данные в существующий файл?
Режим 'a' (append) открывает файл для добавления в конец. Если файла нет, он будет создан.
with open('log.txt', 'a', encoding='utf-8') as f:
f.write('Новая запись\n')File python class (класс для работы с файлами в python)
Не происходит затирания существующих данных.
В режиме 'a' курсор находится в конце файла, поэтому seek() не позволит перезаписать предыдущие данные.
Как обрабатывать файлы с неизвестной кодировкой?
Указывайте параметр encoding при открытии. Если кодировка не известна, можно попробовать часто используемые (utf-8, cp1251). Для пропуска нечитаемых символов используйте аргумент errors='ignore' или errors='replace'.
with open('unknown_enc.txt', 'r', encoding='utf-8', errors='replace') as f:
data = f.read()Python file utf 8 (кодировка utf-8 для файлов в python)
Игнорирование ошибок может привести к потере данных. Лучше определить кодировку через внешние библиотеки или пробовать несколько вариантов.
Как читать и записывать бинарные файлы?
Используйте режимы 'rb' и 'wb'. Это необходимо для изображений, архивов и других нетекстовых данных.
with open('image.jpg', 'rb') as src:
data = src.read()
with open('copy.jpg', 'wb') as dst:
dst.write(data)Python config files (конфигурационные файлы в python)
Кодировка для бинарных файлов не указывается.
Открытие бинарного файла в текстовом режиме ('r') приведёт к искажению данных.
Как использовать модуль pathlib для работы с файлами?
Объект Path предоставляет методы read_text() и write_text(), которые автоматически закрывают файл и поддерживают кодировку.
from pathlib import Path
path = Path('example.txt')
content = path.read_text(encoding='utf-8')
path.write_text('Новый текст', encoding='utf-8')Этот подход считается более современным и лаконичным.
Для больших файлов методы read_text/write_text загружают всё содержимое в память, что неэффективно.
Расширенные примеры работы с файлами
def load_config(filepath):
config = {}
with open(filepath, 'r', encoding='utf-8') as f:
for line in f:
line = line.strip()
if not line or line.startswith('#'):
continue
if '=' in line:
key, value = line.split('=', 1)
config[key.strip()] = value.strip()
return config
config_data = load_config('settings.ini')
print(config_data){'port': '8080', 'host': 'localhost', 'debug': 'true'}def copy_file_chunked(src_path, dst_path, buffer_size=4096):
with open(src_path, 'rb') as src, open(dst_path, 'wb') as dst:
while True:
chunk = src.read(buffer_size)
if not chunk:
break
dst.write(chunk)
print('Копирование завершено')
copy_file_chunked('source.dat', 'destination.dat')Копирование завершено
with open('data.csv', 'r', encoding='utf-8') as f:
header = f.readline().strip().split(',')
print('Заголовки:', header)
for line in f:
row = line.strip().split(',')
if len(row) >= 3 and row[2].isdigit():
if int(row[2]) > 100:
print('Крупная запись:', row)Заголовки: ['id', 'name', 'value'] Крупная запись: ['3', 'Товар C', '150'] Крупная запись: ['7', 'Товар G', '200']
import time
def safe_read(filepath, retries=3, delay=1):
for attempt in range(retries):
try:
with open(filepath, 'r', encoding='utf-8') as f:
return f.read()
except (FileNotFoundError, PermissionError) as e:
print(f'Попытка {attempt+1} не удалась: {e}')
time.sleep(delay)
raise Exception(f'Не удалось прочитать файл {filepath} после {retries} попыток')
content = safe_read('important.txt')
print(content[:100])Попытка 1 не удалась: [Errno 2] No such file or directory: 'important.txt' Попытка 2 не удалась: [Errno 2] No such file or directory: 'important.txt' Попытка 3 не удалась: [Errno 2] No such file or directory: 'important.txt' Traceback (most recent call last): ... Exception: Не удалось прочитать файл important.txt после 3 попыток