Модуль csv в Python
Файлы CSV (значения, разделённые запятыми) — распространённый формат файлов, используемый для хранения табличных данных.
Файлы CSV состоят из простого текста, где каждая строка представляет строку данных в таблице, а каждый столбец разделён запятыми (или другими разделителями).
Файлы CSV обычно используются для обмена данными, поскольку они просты и легко обрабатываются.
Python предоставляет встроенныйcsvмодуль для чтения и записи файлов CSV. Этот модуль упрощает процесс обработки файлов CSV, позволяя разработчикам легко манипулировать табличными данными.
1. Чтение файлов CSV
Для чтения CSV-файлов можно использоватьcsv.readerобъект. Вот простой пример:
Пример
# Открыть CSV-файл
with open('data.csv', mode='r', encoding='utf-8') as file:
# Создать объект csv.reader
csv_reader = csv.reader(file)
# Читать данные построчно
for row in csv_reader:
print(row)
Пояснение кода:
open('data.csv', mode='r', encoding='utf-8'): В режиме только для чтения откройте файл с именемdata.csvи укажите кодировку UTF-8.csv.reader(file): Создайтеcsv.readerобъект для чтения содержимого файла.for row in csv_reader: Читает содержимое файла построчно, и каждая строка данных преобразуется в список.
2. Запись CSV-файлов
Для записи в CSV-файлы можно использоватьcsv.writerобъект. Вот пример:
Пример
# Данные для записи
data = [
['Name', 'Age', 'City'],
['Alice', '30', 'New York'],
['Bob', '25', 'Los Angeles']
]
# Открыть CSV-файл
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
# Создать объект csv.writer
csv_writer = csv.writer(file)
# Запись данных
for row in data:
csv_writer.writerow(row)
Пояснение кода:
open('output.csv', mode='w', encoding='utf-8', newline=''): В режиме записи откройте файл с именемoutput.csvи укажите кодировку UTF-8.newline=''Используется, чтобы избежать пустых строк в системах Windows.csv.writer(file): Создайтеcsv.writerобъект для записи содержимого файла.csv_writer.writerow(row): Записывает каждую строку данных в файл.
3. Чтение и запись CSV-файлов с использованием словарей
csvМодуль также предоставляетDictReaderиDictWriterклассы, которые могут разбирать каждую строку CSV-файла в словарь или записывать словари в CSV-файл.
ИспользованиеDictReaderдля чтения CSV-файлов:
Пример
with open('data.csv', mode='r', encoding='utf-8') as file:
csv_dict_reader = csv.DictReader(file)
for row in csv_dict_reader:
print(row)
ИспользованиеDictWriterдля записи CSV-файлов:
Пример
data = [
{'Name': 'Alice', 'Age': '30', 'City': 'New York'},
{'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
fieldnames = ['Name', 'Age', 'City']
csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
# Записать заголовок
csv_dict_writer.writeheader()
# Запись данных
for row in data:
csv_dict_writer.writerow(row)
Общие атрибуты и методы
Основные методы модуля csv
| Метод | Описание | Пример |
|---|---|---|
csv.reader() | Чтение CSV-данных из файлового объекта | reader = csv.reader(file) |
csv.writer() | Записать данные в файл CSV | writer = csv.writer(file) |
csv.DictReader() | Читать строки CSV как словари (с заголовком) | dict_reader = csv.DictReader(file) |
csv.DictWriter() | Записать словари в файл CSV (требуются имена полей) | dict_writer = csv.DictWriter(file, fieldnames) |
csv.register_dialect() | Зарегистрировать пользовательский формат CSV (например, разделитель) | csv.register_dialect('mydialect', delimiter='|') |
csv.unregister_dialect() | Удалить зарегистрированный диалект | csv.unregister_dialect('mydialect') |
csv.list_dialects() | Показать все зарегистрированные диалекты | print(csv.list_dialects()) |
Общие методы объектов csv.reader и csv.writer
| Метод | Описание | Применимый объект |
|---|---|---|
__next__() | Итеративно читать следующую строку (или использоватьforцикл) | reader |
writerow(row) | Записать одну строку данных | writer |
writerows(rows) | Записать несколько строк данных (список списков) | writer |
Возможности объектов csv.DictReader и csv.DictWriter
| Возможность/Метод | Описание | Пример |
|---|---|---|
fieldnames | Список имён полей (DictReaderавтоматически получается из первой строки) | dict_reader.fieldnames |
writeheader() | Запись строки заголовка (DictWriterэксклюзивно) | dict_writer.writeheader() |
Описание общих параметров
| Параметр | Описание | Пример значения | Применимый метод |
|---|---|---|---|
delimiter | Разделитель полей | ','(по умолчанию)'\t' | reader/writer |
quotechar | Символ кавычки (заключает специальные поля) | '"'(по умолчанию) | reader/writer |
quoting | Правило цитирования | csv.QUOTE_ALL(цитировать всё) | reader/writer |
skipinitialspace | Игнорировать пробелы после разделителя | True/False | reader |
lineterminator | Терминатор строки | '\r\n'(по умолчанию) | writer |
dialect | Предопределённое имя диалекта | 'excel'(по умолчанию) | Все методы |
Пример
1. Чтение файлов CSV
Пример
with open('data.csv', 'r') as файл:
reader = csv.reader(file, delimiter=',')
for row in reader:
print(row) # Каждая строка — это список
2. Запись CSV-файлов
Пример
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data) # Запись нескольких строк
3. Использование DictReader и DictWriter (с заголовком)
Пример
with open('data.csv', 'r') as файл:
dict_reader = csv.DictReader(file)
for row in dict_reader:
print(row['Name'], row['Age']) # Доступ по именам полей
# Запись
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
dict_writer.writeheader() # Записать заголовок
dict_writer.writerow({'Name': 'Alice', 'Age': 25})
4. Пользовательские диалекты (например, обработка файлов TSV)
Пример
with open('data.tsv', 'r') as файл:
reader = csv.reader(file, dialect='tsv')
for row in reader:
print(row)