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

Модуль csv - чтение и запись CSV файлов | Python 3
На чтение
15 мин.
Просмотров
37
Дата обновления
10.03.2025
#COURSE##INNER#

Для работы с 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.

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий