Утилита для обработки CSV файлов с поддержкой фильтрации и агрегации данных.
pip install -r requirements.txt
# Показать все данные
python csv_processor.py sample_data.csv
# Фильтрация по равенству
python csv_processor.py sample_data.csv --filter "brand=eq=xiaomi"
# Фильтрация по числовым значениям
python csv_processor.py sample_data.csv --filter "price=gt=500"
python csv_processor.py sample_data.csv --filter "rating=lt=4.5"
# Агрегация данных
python csv_processor.py sample_data.csv --aggregate "price=avg"
python csv_processor.py sample_data.csv --aggregate "rating=min"
python csv_processor.py sample_data.csv --aggregate "price=max"
# Комбинирование фильтрации и агрегации
python csv_processor.py sample_data.csv --filter "brand=eq=xiaomi" --aggregate "price=avg"
eq
или==
— равенствоgt
или>
— большеlt
или<
— меньше
avg
— среднее значениеmin
— минимальное значениеmax
— максимальное значение
# Запуск тестов
pytest
# Покрытие кода (HTML-отчет)
pytest --cov=csv_processor --cov-report=html
# Подробный отчет в терминале
pytest -v --cov=csv_processor --cov-report=term-missing
# Фильтрация по бренду
python csv_processor.py sample_data.csv --filter "brand=eq=xiaomi"
# Агрегация по цене
python csv_processor.py sample_data.csv --aggregate "price=avg"
# Комбинированный запрос
python csv_processor.py sample_data.csv --filter "price=gt=400" --aggregate "rating=avg"
Проект реализован с использованием паттерна Стратегия, что позволяет легко добавлять новые операторы фильтрации и агрегации без изменения основного кода.
FilterOperator
— базовый класс операторов фильтрацииAggregationFunction
— базовый класс агрегационных функцийCSVProcessor
— основной класс обработки данных
pip install -r requirements.txt
# Show all data
python csv_processor.py sample_data.csv
# Filter by equality
python csv_processor.py sample_data.csv --filter "brand=eq=xiaomi"
# Filter by numeric values
python csv_processor.py sample_data.csv --filter "price=gt=500"
python csv_processor.py sample_data.csv --filter "rating=lt=4.5"
# Aggregate data
python csv_processor.py sample_data.csv --aggregate "price=avg"
python csv_processor.py sample_data.csv --aggregate "rating=min"
python csv_processor.py sample_data.csv --aggregate "price=max"
# Combine filtering and aggregation
python csv_processor.py sample_data.csv --filter "brand=eq=xiaomi" --aggregate "price=avg"
eq
or==
— equalgt
or>
— greater thanlt
or<
— less than
avg
— averagemin
— minimummax
— maximum
# Run tests
pytest
# Code coverage (HTML report)
pytest --cov=csv_processor --cov-report=html
# Verbose terminal report
pytest -v --cov=csv_processor --cov-report=term-missing
# Filter by brand
python csv_processor.py sample_data.csv --filter "brand=eq=xiaomi"
# Aggregate price
python csv_processor.py sample_data.csv --aggregate "price=avg"
# Combined query
python csv_processor.py sample_data.csv --filter "price=gt=400" --aggregate "rating=avg"
The project uses the Strategy pattern, which makes it easy to add new filtering operators or aggregation functions without modifying core logic.
FilterOperator
— base class for filtering operatorsAggregationFunction
— base class for aggregation functionsCSVProcessor
— main processing class