Чтение данных CSV в настраиваемые объекты
При работе с CSV-файлами на Python часто желательно считывать данные в настраиваемые объекты, а не работать с необработанными структурами данных, такими как списки или словари. Этот подход позволяет инкапсулировать данные и связанную логику в своих собственных классах, делая код более организованным, поддерживаемым и легким в использовании.
Для чтения данных CSV в настраиваемые объекты можно использовать встроенный модуль csv
в Python, а также концепцию классов данных (введенную в Python 3.7) или обычные классы.
Использование классов данных
Классы данных в Python предоставляют удобный способ определения настраиваемых объектов и автоматического создания шаблонного кода, таких как методы __init__()
, __repr__()
и __eq__()
. Вот пример того, как использовать классы данных для чтения данных CSV:
from dataclasses import dataclass
import csv
@dataclass
class Person:
name: str
age: int
city: str
with open('people.csv', 'r') as file:
reader = csv.DictReader(file)
people = [Person(**row) for row in reader]
for person in people:
print(person)
В этом примере класс Person
определен с использованием декоратора @dataclass
, который автоматически создает необходимые методы. csv.DictReader
используется для чтения данных CSV в словарь, а затем каждая строка используется для создания объекта Person
.
Использование обычных классов
В качестве альтернативы можно использовать обычные классы Python, чтобы достичь того же результата:
import csv
class Person:
def __init__(self, name, age, city):
self.name = name
self.age = age
self.city = city
def __repr__(self):
return f"Person(name='{self.name}', age={self.age}, city='{self.city}')"
with open('people.csv', 'r') as file:
reader = csv.reader(file)
next(reader) ## Пропустить строку заголовка
people = [Person(*row) for row in reader]
for person in people:
print(person)
В этом примере класс Person
определен вручную, с методом __init__()
для инициализации атрибутов объекта и методом __repr__()
для предоставления строкового представления объекта.
Оба подхода позволяют работать с данными CSV более структурированным и объектно-ориентированным способом, что упрощает управление и манипуляцию данными в вашем приложении на Python.