Как на Python прочитать CSV-файл и вывести только те строки, где значение в колонке status равно active?
Для чтения CSV-файла и фильтрации строк по значению колонки `status` в Python существует несколько подходов. Рассмотрим два наиболее популярных: встроенный модуль `csv` и библиотека `pandas`.
—
## Пример CSV-файла
Прежде чем писать код, создадим тестовый CSV-файл. Вот одна строка для будущего CSV (включая заголовок):
id,name,email,status
1,Alice,alice@example.com,active
2,Bob,bob@example.com,inactive
3,Carol,carol@example.com,active
Сохраните этот файл как `users.csv`.
—
## Способ 1: Встроенный модуль csv
python
import csv
with open(‘users.csv’, newline=», encoding=’utf-8′) as f:
reader = csv.DictReader(f)
for row in reader:
if row[‘status’] == ‘active’:
print(row)
`csv.DictReader` читает каждую строку как словарь, где ключи — это названия колонок из заголовка. Условие `row[‘status’] == ‘active’` фильтрует только нужные строки.
**Вывод:**
{‘id’: ‘1’, ‘name’: ‘Alice’, ’email’: ‘alice@example.com’, ‘status’: ‘active’}
{‘id’: ‘3’, ‘name’: ‘Carol’, ’email’: ‘carol@example.com’, ‘status’: ‘active’}
—
## Способ 2: Библиотека pandas
python
import pandas as pd
df = pd.read_csv(‘users.csv’)
active_rows = df[df[‘status’] == ‘active’]
print(active_rows)
`pandas` загружает весь файл в DataFrame, а булева маска `df[‘status’] == ‘active’` возвращает только подходящие строки. Это удобнее при работе с большими файлами и сложными условиями.
**Вывод:**
id name email status
0 1 Alice alice@example.com active
2 3 Carol carol@example.com active
—
## Дополнительные советы
— **Регистр символов:** если значения могут быть `Active`, `ACTIVE` и т.д., используйте `.str.lower()` в pandas или `.lower()` в модуле csv.
— **Пробелы:** CSV-файлы иногда содержат пробелы вокруг значений. В `csv.DictReader` используйте параметр `skipinitialspace=True`.
— **Большие файлы:** модуль `csv` читает файл построчно и не загружает всё в память, что предпочтительно для очень больших файлов.
— **Запись результата:** отфильтрованные строки можно сохранить в новый CSV с помощью `csv.DictWriter` или `df.to_csv(‘output.csv’, index=False)`.
—
Оба подхода просты в использовании. Для небольших задач достаточно встроенного модуля `csv`, а для аналитики и сложной обработки данных лучше использовать `pandas`.
