Модуль csv - чтение и запись CSV файлов | Python 3

Для работы с CSV-файлами в Python 3 используйте модуль csv. Он предоставляет простые и эффективные инструменты для чтения и записи данных в формате CSV. В данном руководстве мы рассмотрим основные методы работы с этим модулем.
Чтение данных из CSV: Предположим, у вас есть файл "data.csv" со следующей структурой:
Имя,Возраст,Город
Иван,30,Москва
Петр,25,Санкт-Петербург
Для чтения данных воспользуйтесь следующим кодом:
import csv
with open('data.csv', 'r', newline="") as csvfile:
reader = csv.reader(csvfile)
next(reader) # Пропуск заголовка
for row in reader:
print(row)
Запись данных в CSV: Рассмотрим пример записи данных в файл "output.csv":
import csv
data = [
['Анна', '28', 'Нижний Новгород'],
['Мария', '32', 'Казань']
]
with open('output.csv', 'w', newline="") as csvfile:
writer = csv.writer(csvfile)
writer.writerows(data)
Этот код запишет данные из списка data в файл "output.csv". Обратите внимание на параметр newline="", необходимый для корректной работы с разделителями в CSV-файлах.
Модуль csv - чтение и запись CSV файлов в Python 3
Для работы с CSV-файлами в Python 3 используется модуль csv
. Он позволяет эффективно читать и записывать данные. Ниже примеры.
Чтение CSV-файла:
import csv
with open('data.csv', 'r', newline="") as file:
reader = csv.reader(file)
for row in reader:
print(row)
Файл data.csv
должен содержать данные, разделённые запятыми. Ключевым моментом здесь является newline=""
. Он предотвращает проблемы с переносами строк в разных системах.
Запись CSV-файла:
import csv
data = [['Имя', 'Возраст'], ['Иван', 30], ['Мария', 25]]
with open('output.csv', 'w', newline="") as file:
writer = csv.writer(file)
writer.writerows(data)
Этот код записывает данные в файл output.csv
. Методwriterows
позволяет сразу записать список строк.
Управление разделителями:
import csv
with open('data2.csv', 'r', newline="") as file:
reader = csv.reader(file, delimiter=';') # Замена , на ;
for row in reader:
print(row)
В данном примере, если в файле data2.csv
данные разделяются точкой с запятой (’;'), то использование delimiter=';'
позволит прочитать эти данные корректно.
Установка библиотеки csv
Библиотека csv
уже включена в стандартную библиотеку Python 3. Нет необходимости устанавливать её отдельно.
Это означает, что после установки Python, вы можете сразу использовать модуль csv
в своих программах.
Открытие и чтение CSV файлов
Для чтения CSV файла в Python используйте модуль csv
. Вот код:
import csv
with open('data.csv', 'r', newline="") as file:
reader = csv.reader(file)
for row in reader:
print(row)
Ключевые моменты:
- Файл открывается в режиме 'r' (чтение). Важен параметр
newline=""
, который предотвращает проблемы с переносами строк. - Объект
csv.reader
создается из файла. Он обрабатывает CSV данные. - Цикл
for row in reader
перебирает строки CSV файла, где каждаяrow
– это список строк.
Пример файла data.csv
:
Name,Age,City
Alice,30,New York
Bob,25,London
Charlie,35,Paris
Выходной код:
['Name', 'Age', 'City']
['Alice', '30', 'New York']
['Bob', '25', 'London']
['Charlie', '35', 'Paris']
Если строки имеют разделитель, отличной от запятой (например, табуляцию), вы можете указать его в csv.reader
. Например, чтобы использовать табуляцию:
import csv
with open('data.tsv', 'r', newline="") as file:
reader = csv.reader(file, delimiter='\t') # Используется delimiter='\t'
for row in reader:
print(row)
Чтение CSV файлов с заголовками
Для чтения CSV файлов с заголовками используйте параметр header=0
при работе с модулем csv
. Это говорит Python, что первая строка файла содержит имена столбцов.
Код Python | Описание |
---|---|
python import csv with open('data.csv', 'r', newline="") as file: reader = csv.reader(file, delimiter=';', quotechar='"') next(reader) # Пропускаем заголовок for row in reader: print(row) |
|
python import csv with open('data.csv', 'r', newline="") as file: reader = csv.DictReader(file, delimiter=';') for row in reader: print(row['Имя']) # Обращение к столбцу по имени |
В первом примере, мы пропускаем заголовок с помощью next(reader)
, а во втором - функция csv.DictReader
автоматически парсит заголовок.
Важно установить newline=""
, чтобы избежать проблем с переносом строк в Windows-файлах.
Запись данных в CSV файлы
Для записи данных в CSV файл используйте функцию writer
из модуля csv
. Пример:
import csv
data = [
['Имя', 'Возраст', 'Город'],
['Иван', '30', 'Москва'],
['Петр', '25', 'Санкт-Петербург']
]
with open('people.csv', 'w', newline="") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(data[0]) # Записываем заголовок
for row in data[1:]:
writer.writerow(row)
Ключевые моменты:
'w'
режим открытия файла для записи.- Использование
newline=""
предотвращает добавление пустых строк. - Метод
writerow
записывает данные. - Первый элемент списка
data
(['Имя', 'Возраст', 'Город']
) - это заголовки колонок. - Следующие элементы списка содержат данные строк.
- Если файл
people.csv
не существует, он будет создан.
Чтобы добавить другую информацию в файл, просто добавьте ещё строки в список data
.
Работа с различными разделителями
Для работы с CSV-файлами, имеющими разделители, отличные от запятой (,), используйте аргумент delimiter
в функциях csv.reader
и csv.writer
.
Пример 1: Файл с табуляцией
import csv with open('data.tsv', 'r', encoding='utf-8') as file: reader = csv.reader(file, delimiter='\t') # Разделитель - табуляция for row in reader: print(row)
Пример 2: Файл с точкой с запятой
import csv with open('data.csv', 'r', encoding='utf-8') as file: reader = csv.reader(file, delimiter=';') # Разделитель - точка с запятой for row in reader: print(row)
Важно: Установите кодировку файла (encoding='utf-8'
), чтобы избежать проблем с нестандартными символами.
Обработка ошибок и исключений
Для надежной работы с CSV-файлами крайне важна обработка исключений. Например, файл может быть поврежден, или не соответствовать ожидаемой структуре. Используйте оператор try...except
для предотвращения выхода программы при возникновении ошибки.
Пример обработки ошибок при чтении файла:
import csv
def read_csv(filename):
try:
with open(filename, 'r', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
print(row)
except FileNotFoundError:
print(f"Ошибка: файл {filename} не найден.")
except UnicodeDecodeError:
print(f"Ошибка: файл {filename} некорректно закодирован. Используйте другой кодировщик (например, 'latin-1').")
except csv.Error as e:
print(f"Ошибка чтения CSV: {e}")
read_csv('data.csv')
В данном коде мы обрабатываем FileNotFoundError
, UnicodeDecodeError
и csv.Error
. Это позволяет программе продолжить работу, даже если в одном из файлов возникла проблема.
Обратите внимание на конкретные типы исключений, которые могут возникнуть при чтении и записи CSV-файлов (FileNotFoundError
, UnicodeDecodeError
, csv.Error
) и соответствующие сообщения об ошибках.
Вместо общего except Exception as e:
используйте конкретные исключения, чтобы понять, что пошло не так. Это делает код более читаемым и дебагирование намного проще.
Вопрос-ответ:
Как прочитать CSV файл, у которого структура строк разная (например, количество столбцов в разных строках по разному)?
Если количество столбцов не одинаково по всем строкам, то при чтении нужно учитывать ситуацию и обращаться с разными длинами. Например, можно пропускать строки, где количество столбцов не соответсвует нужному, либо обращаться к столбцам в цикле, и проверять наличие элементов перед использованием. Использовать `try...except` для обработки ошибок, если элемент отсутствует.
Можно ли использовать модуль csv для работы с файлами, содержащими данные в формате Excel (XLSX)?
Нет, модуль `csv` предназначен для работы с файлами в формате CSV. Для работы с Excel-файлами (XLSX) необходимо использовать другие библиотеки, например, `openpyxl` или `xlrd`. Эти библиотеки позволяют читать и записывать данные в формате Excel.