10. Работа с данными #
Работа с данными — важная часть разработки приложений. Python предлагает множество библиотек для работы с различными форматами данных и базами.
10.1. JSON и YAML #
Работа с JSON #
JSON (JavaScript Object Notation) — популярный формат для хранения и обмена данными.
Чтение и запись JSON #
import json
# Запись данных в файл
data = {"name": "Alice", "age": 30, "is_student": False}
with open("data.json", "w") as file:
json.dump(data, file)
# Чтение данных из файла
with open("data.json", "r") as file:
loaded_data = json.load(file)
print(loaded_data) # {'name': 'Alice', 'age': 30, 'is_student': False}
Работа со строками JSON #
# Преобразование Python-объекта в строку
json_string = json.dumps(data)
print(json_string) # {"name": "Alice", "age": 30, "is_student": false}
# Преобразование строки JSON в Python-объект
parsed_data = json.loads(json_string)
print(parsed_data) # {'name': 'Alice', 'age': 30, 'is_student': False}
Работа с YAML #
YAML (YAML Ain’t Markup Language) — человекочитаемый формат данных.
Установка PyYAML #
pip install pyyaml
Пример работы #
import yaml
# Запись данных в YAML
data = {"name": "Alice", "age": 30, "is_student": False}
with open("data.yaml", "w") as file:
yaml.dump(data, file)
# Чтение данных из YAML
with open("data.yaml", "r") as file:
loaded_data = yaml.safe_load(file)
print(loaded_data) # {'name': 'Alice', 'age': 30, 'is_student': False}
10.2. CSV и Excel #
Работа с CSV #
CSV (Comma-Separated Values) — формат табличных данных.
Чтение и запись CSV #
import csv
# Запись данных в CSV
data = [["Name", "Age"], ["Alice", 30], ["Bob", 25]]
with open("data.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(data)
# Чтение данных из CSV
with open("data.csv", "r") as file:
reader = csv.reader(file)
for row in reader:
print(row)
Работа с Excel #
Для работы с Excel используется библиотека openpyxl
.
Установка библиотеки #
pip install openpyxl
Пример работы #
from openpyxl import Workbook, load_workbook
# Создание Excel-файла
wb = Workbook()
sheet = wb.active
sheet.title = "Sheet1"
sheet.append(["Name", "Age"])
sheet.append(["Alice", 30])
sheet.append(["Bob", 25])
wb.save("data.xlsx")
# Чтение Excel-файла
wb = load_workbook("data.xlsx")
sheet = wb.active
for row in sheet.iter_rows(values_only=True):
print(row)
10.3. Работа с базами данных (SQLite, SQLAlchemy) #
SQLite #
SQLite — легковесная реляционная база данных, встроенная в Python.
Работа с SQLite #
import sqlite3
# Подключение к базе данных
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
# Создание таблицы
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
# Добавление данных
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 30))
conn.commit()
# Чтение данных
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
print(row)
conn.close()
SQLAlchemy #
SQLAlchemy — мощная ORM для работы с базами данных.
Установка #
pip install sqlalchemy
Пример работы #
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
# Определение модели
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# Настройка подключения
engine = create_engine("sqlite:///example.db")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# Добавление данных
new_user = User(name="Alice", age=30)
session.add(new_user)
session.commit()
# Чтение данных
for user in session.query(User).all():
print(user.name, user.age)
10.4. Сериализация данных (pickle) #
Библиотека pickle
#
pickle
используется для сохранения и загрузки Python-объектов.
Сохранение объекта #
import pickle
data = {"name": "Alice", "age": 30}
# Сохранение объекта в файл
with open("data.pkl", "wb") as file:
pickle.dump(data, file)
Загрузка объекта #
# Загрузка объекта из файла
with open("data.pkl", "rb") as file:
loaded_data = pickle.load(file)
print(loaded_data) # {'name': 'Alice', 'age': 30}
Работа с байтовыми строками #
# Сериализация в строку
serialized = pickle.dumps(data)
print(serialized)
# Десериализация из строки
deserialized = pickle.loads(serialized)
print(deserialized)
Рекомендации #
- Используйте
json
иyaml
для текстовых данных, которые нужно обменивать между системами. - Применяйте
csv
иopenpyxl
для табличных данных. - Для работы с базами данных используйте ORM (например, SQLAlchemy) для удобства и читабельности.
- Используйте
pickle
для сохранения сложных Python-объектов, но избегайте его для данных из ненадежных источников (из-за уязвимостей безопасности).