Работа с файлами в Python: инструментарий и решения
Библиотеки для работы с файлами: обзор и примеры
Python предлагает множество библиотек для взаимодействия с файловой системой и обработки данных. Выбор подходящего инструмента зависит от задачи. Рассмотрим основные варианты.
Как организовать надёжную работу с файлами в современном проекте?
Модуль pathlib из стандартной библиотеки предоставляет объектно-ориентированный интерфейс для путей. Вместе с менеджером контекста with он обеспечивает безопасное открытие и закрытие файлов.
from pathlib import Path
path = Path('data.txt')
if path.exists():
with path.open('r', encoding='utf-8') as f:
text = f.read()
print(text[:100])Python библиотеки словари (библиотеки для работы со словарями в python)
Этот код читает первые 100 символов файла, гарантируя освобождение ресурсов. Кодировка указана явно, что предотвращает ошибки на разных платформах.
Проблема: файл может быть большим. Решение: использовать итерацию построчно (for line in f) вместо read().
Как получить список файлов в директории, не используя pathlib?
Классический способ через os.listdir().
import os
entries = os.listdir('.')
files = [e for e in entries if os.path.isfile(e)]
print(files)библиотека python user (пользовательские библиотеки python)
Ошибка: в список попадают скрытые файлы. Фильтр: исключить файлы, начинающиеся с точки, с помощью условия not e.startswith('.').
Как выбрать файлы по маске, например все изображения?
Модуль glob упрощает поиск по шаблонам.
import glob
images = glob.glob('*.jpg') + glob.glob('*.png')
print(images)библиотека алгоритмов python (библиотека алгоритмов в python)
Как прочитать файл CSV и преобразовать его в список словарей?
Встроенный модуль csv справляется с этой задачей.
import csv
with open('data.csv', 'r', newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
rows = [row for row in reader]
print(rows)библиотека скриптов python (библиотека скриптов в python)
Распространённая ошибка: разделитель не запятая. Исправление: указать параметр delimiter=';' при создании reader.
Как записать данные в JSON-файл с красивым форматированием?
Модуль json позволяет сериализовать объекты.
import json
data = {'name': 'Alice', 'scores': [10, 20]}
with open('output.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)библиотеки работы с файлами python (библиотеки для работы с файлами в python)
Параметр ensure_ascii=False сохраняет символы Unicode.
Как скопировать файл из одного места в другое?
Библиотека shutil предоставляет функцию copy2, которая копирует содержимое и метаданные.
import shutil
shutil.copy2('source.txt', 'backup/source.txt')Python библиотека сети (сетевая библиотека в python)
Ошибка: целевая директория не существует. Решение: предварительно создать её через os.makedirs или pathlib.Path.mkdir(parents=True).
Как прочитать содержимое Excel-файла без установки pandas?
Библиотека openpyxl (сторонняя) поддерживает формат .xlsx.
from openpyxl import load_workbook
wb = load_workbook('report.xlsx')
ws = wb.active
for row in ws.iter_rows(values_only=True):
print(row)Расширенные примеры работы с файлами
Приведённые ниже сценарии демонстрируют нетривиальные случаи применения библиотек.
Рекурсивный обход всех файлов проекта
Использование pathlib.rglob() позволяет найти все файлы с определённым расширением в поддиректориях.
from pathlib import Path
base = Path('src')
for py_file in base.rglob('*.py'):
print(py_file)src\main.py src\utils\helpers.py src\tests\test_utils.py
Результат показывает все файлы .py внутри папки src и её подпапок.
Параллельное чтение нескольких больших файлов
С помощью concurrent.futures можно ускорить обработку.
import concurrent.futures
import os
def read_file(filename):
with open(filename, 'r', encoding='utf-8') as f:
return len(f.read())
files = ['big1.txt', 'big2.txt', 'big3.txt']
with concurrent.futures.ProcessPoolExecutor() as executor:
results = list(executor.map(read_file, files))
print(sum(results))Проблема: утечка памяти при чтении всех данных в память. Альтернатива: обрабатывать файл построчно или использовать mmap.
Создание временного файла и его автоматическое удаление
Модуль tempfile обеспечивает безопасное создание временных ресурсов.
import tempfile
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=True) as tmp:
tmp.write('Временные данные')
tmp.flush()
# Путь к файлу доступен как tmp.name
print('Создан файл:', tmp.name)
# После выхода из with файл удалён