📁 Выгрузка данных в Python: JSON/XML/Excel/CSV
Какие данные? Какая выгрузка?
🚀 Введение
В мире, где данные стали новой валютой, умение эффективно их сохранять и передавать — ключевой навык. Python предлагает мощные инструменты для работы с форматами:
Формат | Сильные стороны | Популярные библиотеки |
---|---|---|
JSON | Веб-API, конфиги |
|
XML | Древовидные структуры |
|
Excel | Бизнес-отчёты |
|
CSV | Совместимость, простота |
|
📊 Excel: чтение и запись
Чтение (pandas.read_excel)
import pandas as pd
# Все параметры в одном примере
df = pd.read_excel(
io='data.xlsx',
sheet_name='Orders',
header=0,
names=['ID', 'Date'],
usecols='A:D',
dtype={'Price': float},
skipfooter=2
)
Запись (DataFrame.to_excel)
df.to_excel(
'report.xlsx',
sheet_name='Анализ',
index=False,
na_rep='N/A',
float_format='%.2f',
freeze_panes=(1, 0)
📄 CSV: ключевые особенности
Чтение с обработкой кодировки
from chardet import detect
# Автоопределение кодировки
with open('data.csv', 'rb') as f:
result = detect(f.read(10000))
df = pd.read_csv('data.csv', encoding=result['encoding'])
Запись с кастомными параметрами
python
df.to_csv(
'output.csv',
sep=';',
columns=['name', 'age'],
header=['Имя', 'Возраст'],
encoding='utf-8-sig',
index=False
)
🌳 XML: безопасный парсинг
Базовые операции
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
# Поиск элементов
for item in root.iter('product'):
print(item.find('price').text)
# Модификация
for elem in root.findall('.//discount'):
elem.text = str(float(elem.text) * 1.1)
tree.write('updated.xml')
🔄 JSON: продвинутые сценарии
Кастомная сериализация
import json
from datetime import datetime
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
data = {'time': datetime.now(), 'values': [1, 2, 3]}
json_str = json.dumps(data, cls=CustomEncoder, indent=2)
Парсинг с валидацией
from jsonschema import validate
schema = {
"type": "object",
"properties": {
"email": {"type": "string", "format": "email"}
}
}
data = json.loads('{"email": "user@example.com"}')
validate(instance=data, schema=schema)
🛡️ Безопасность и кодировки
Лучшие практики
Всегда указывайте кодировку при работе с файлами
Ограничивайте размер загружаемых данных
Используйте object_hook для контроля входных данных
# Пример защиты от XML-атак
parser = ET.XMLParser(target=ET.TreeBuilder(),
forbid_dtd=True,
resolve_entities=False)
🧰 Полезные инструменты
Задача | Инструмент |
---|---|
Валидация JSON |
|
Конвертация кодировки |
|
Просмотр Excel |
|
Выбор формата зависит от задачи: JSON для API, XML для структуры, Excel для отчетов, CSV для совместимости