
Файлы CSV (значения, разделенные запятыми) являются популярным форматом обмена данными благодаря их простоте и удобству использования. Python предоставляет встроенный модуль csv, который предлагает мощные инструменты для работы с CSV-файлами. Хотя модуль csv обычно используется для основных операций с файлами CSV, он также предлагает несколько расширенных функций, которые могут упростить задачи обработки данных. В этой статье мы рассмотрим различные расширенные варианты использования модуля csv с примерами кода.
1. Чтение и запись файлов CSV
Наиболее фундаментальным вариантом использования модуля csv является чтение и запись файлов CSV. Модуль предоставляет для этой цели функции csv.reader() и csv.writer().
import csv
# Reading CSV File
with open('data.csv', 'r') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
print(row)
# Writing CSV File
data = [['John', 'Doe', '[email protected]'], ['Jane', 'Smith', '[email protected]']]
with open('output.csv', 'w') as file:
csv_writer = csv.writer(file)
csv_writer.writerows(data)
В первом фрагменте кода мы используем
csv.reader()для чтения содержимого CSV-файла'data.csv'. Затем данные печатаются построчно.
Второй фрагмент кода записывает список данных (
data) в новый CSV-файл'output.csv', используяcsv.writer()иwriterows().
2. Пользовательские разделители и символы кавычек
По умолчанию модуль csv предполагает запятую (,) в качестве разделителя и двойную кавычку (") в качестве символа кавычек. Однако файлы CSV могут использовать другие разделители и символы кавычек. Модуль csv позволяет нам указывать пользовательские разделители и символы кавычек.
import csv
# Reading CSV File with Custom Delimiter and Quote Character
with open('data.tsv', 'r') as file:
csv_reader = csv.reader(file, delimiter='\t', quotechar='"')
for row in csv_reader:
print(row)
# Writing CSV File with Custom Delimiter and Quote Character
data = [['John', 'Doe', '[email protected]'], ['Jane', 'Smith', '[email protected]']]
with open('output.csv', 'w') as file:
csv_writer = csv.writer(file, delimiter=';', quotechar="'")
csv_writer.writerows(data)
В первом фрагменте кода мы читаем файл значений, разделенных табуляцией (TSV)
'data.tsv', указав разделитель как'\t'и символ кавычки как'"'.
Второй фрагмент кода записывает список данных (
data) в новый файл CSV'output.csv', используя точку с запятой (;) в качестве разделителя и одинарную кавычку (') в качестве символа кавычки.
3. Чтение данных CSV в словарь
В то время как базовый класс csv.reader() рассматривает каждую строку как список, класс csv.DictReader() позволяет нам рассматривать каждую строку как словарь с заголовками столбцов в качестве ключей.
import csv
# Reading CSV File into Dictionary
with open('data.csv', 'r') as file:
csv_reader = csv.DictReader(file)
for row in csv_reader:
print(row['Name'], row['Email'])
В этом фрагменте кода мы читаем CSV-файл
'data.csv', используяcsv.DictReader(). Каждая строка рассматривается как словарь, и мы можем получить доступ к определенным значениям из словаря, используя соответствующие ключи. В этом примере мы получаем доступ к столбцам'Name'и'Email'из каждой строки.
4. Запись данных CSV из словаря
Точно так же мы можем использовать класс csv.DictWriter() для записи данных из словарей в файлы CSV.
import csv
# Writing CSV File from Dictionary
data = [{'Name': 'John', 'Age': 30}, {'Name': 'Jane', 'Age': 25}]
fieldnames = ['Name', 'Age']
with open('output.csv', 'w') as file:
csv_writer = csv.DictWriter(file, fieldnames=fieldnames)
csv_writer.writeheader()
csv_writer.writerows(data)
В этом фрагменте кода мы определяем список словарей (
data), где каждый словарь представляет строку данных. Мы также определяем имена полей (заголовки столбцов) как['Name', 'Age']. Затем мы используемcsv.DictWriter()для записи данных в новый файл CSV'output.csv'. Методwriteheader()записывает заголовки столбцов, а методwriterows()записывает строки данных.
5. Обработка разных концов строк
Файлы CSV могут иметь разные окончания строк в зависимости от используемой операционной системы или текстового редактора. Модуль csv предоставляет возможность обрабатывать разные окончания строк, указывая аргумент newline='' при открытии CSV-файлов.
import csv
# Reading CSV File with Different Line Endings
with open('data.csv', 'r', newline='') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
print(row)
# Writing CSV File with Different Line Endings
data = [['John', 'Doe'], ['Jane', 'Smith']]
with open('output.csv', 'w', newline='') as file:
csv_writer = csv.writer(file)
csv_writer.writerows(data)
В обоих фрагментах кода мы передаем newline='' в качестве аргумента open() для обработки разных концов строк в файлах CSV. Первый фрагмент кода читает CSV-файл 'data.csv' с разными окончаниями строк, используя csv.reader(), и печатает каждую строку. Второй фрагмент кода записывает список данных (data) в новый CSV-файл 'output.csv' без добавления каких-либо дополнительных окончаний строк.
6. Обработка ошибок и исключений
При работе с файлами CSV важно обрабатывать ошибки, которые могут возникнуть во время операций чтения или записи. Модуль csv позволяет нам перехватывать и обрабатывать ошибки с помощью исключения csv.Error.
import csv
try:
with open('data.csv', 'r') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
print(row)
except csv.Error as e:
print(f"Error occurred while reading CSV: {e}")
В этом фрагменте кода мы используем блок try-except для обнаружения и обработки ошибок, которые могут возникнуть при чтении CSV-файла. Если возникает ошибка, она перехватывается как исключение csv.Error, и печатается пользовательское сообщение об ошибке.
7. Работа с диалектами CSV
Модуль csv поддерживает пользовательские диалекты, которые позволяют нам определять и использовать определенные правила форматирования для файлов CSV. Мы можем зарегистрировать собственные диалекты с помощью csv.register_dialect() и применять их при чтении или записи CSV-файлов.
import csv
csv.register_dialect('mydialect', delimiter=';', quoting=csv.QUOTE_NONE)
# Reading CSV File with Custom Dialect
with open('data.csv', 'r') as file:
csv_reader = csv.reader(file, dialect='mydialect')
for row in csv_reader:
print(row)
# Writing CSV File with Custom Dialect
data = [['John', 'Doe'], ['Jane', 'Smith']]
with open('output.csv', 'w') as file:
csv_writer = csv.writer(file, dialect='mydialect')
csv_writer.writerows(data)
В этом фрагменте кода мы регистрируем пользовательский диалект с именем
'mydialect', используяcsv.register_dialect(). Мы указываем точку с запятой (;) в качестве разделителя и отключаем цитирование с помощьюcsv.QUOTE_NONE. Первый фрагмент кода читает CSV-файл'data.csv', используя пользовательский диалект'mydialect', передаваяdialect='mydialect'вcsv.reader(). Второй фрагмент кода записывает список данных (data) в новый CSV-файл'output.csv', используя пользовательский диалект'mydialect', передаваяdialect='mydialect'вcsv.writer().
В этой статье были рассмотрены расширенные варианты использования модуля csv в Python, включая чтение и запись файлов CSV, настраиваемые разделители и символы кавычек, работу со словарями, обработку различных окончаний строк, обработку ошибок и использование пользовательских диалектов. Модуль csv предоставляет мощные инструменты для эффективной обработки данных CSV, что делает его ценным ресурсом для задач обработки данных.