Pull to refresh

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

Level of difficultyEasy

📁 Выгрузка данных в 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 для совместимости

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.