Как стать автором
Обновить

Выгрузка данных в Python: JSON/XML/Excel/CSV

Уровень сложностиПростой

📁 Выгрузка данных в Python: JSON/XML/Excel/CSV

Какие данные? Какая выгрузка?

🚀 Введение

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

Формат

Сильные стороны

Популярные библиотеки

JSON

Веб-API, конфиги

json, ujson, orjson

XML

Древовидные структуры

xml.etree, lxml

Excel

Бизнес-отчёты

pandas, openpyxl

CSV

Совместимость, простота

pandas, 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

python -m json.tool

Конвертация кодировки

iconv -f WINDOWS-1251 -t UTF-8

Просмотр Excel

openpyxl + pandas

Выбор формата зависит от задачи: JSON для API, XML для структуры, Excel для отчетов, CSV для совместимости

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.