Статьи

Как читать и писать файлы CSV в Python

Формат CSV является наиболее часто используемым форматом импорта и экспорта для баз данных и электронных таблиц. В этом руководстве будет подробно рассказано о CSV, а также о модулях и классах, доступных для чтения и записи данных в файлы CSV. Также будет рассмотрен рабочий пример, чтобы показать вам, как читать и записывать данные в файл CSV на Python.

Файл CSV (значения, разделенные запятыми) позволяет сохранять данные в табличной структуре с расширением .csv. Файлы CSV широко использовались в приложениях электронной коммерции, поскольку их очень легко обрабатывать. Некоторые из областей, где они были использованы, включают в себя:

  • импорт и экспорт данных клиентов
  • импорт и экспорт продукции
  • экспорт заказов
  • экспорт аналитических отчетов по электронной коммерции

Модуль CSV имеет несколько функций и классов, доступных для чтения и записи CSV, и они включают в себя:

  • функция csv.reader
  • функция csv.writer
  • класс csv.Dictwriter
  • класс csv.DictReader

Модуль csv.reader принимает следующие параметры:

  • csvfile : обычно это объект, который поддерживает протокол итератора и обычно возвращает строку каждый раз, когда __next__() его __next__() .
  • dialect='excel' : необязательный параметр, используемый для определения набора параметров, специфичных для определенного диалекта CSV.
  • fmtparams : необязательный параметр, который можно использовать для переопределения существующих параметров форматирования.

Вот пример того, как использовать модуль csv.reader.

1
2
3
4
5
6
import csv
 
with open(‘example.csv’, newline=») as File:
    reader = csv.reader(File)
    for row in reader:
        print(row)

Этот модуль похож на модуль csv.reader и используется для записи данных в CSV. Требуется три параметра:

  • csvfil e : это мочь быть любым объектом с методом write() .
  • dialect='excel' : необязательный параметр, используемый для определения набора параметров, специфичных для конкретного CSV.
  • fmtparam : необязательный параметр, который можно использовать для переопределения существующих параметров форматирования.

DictReader и DictWriter — это классы, доступные в Python для чтения и записи в CSV. Хотя они и похожи на функции чтения и записи, эти классы используют объекты словаря для чтения и записи в CSV-файлы.

Он создает объект, который отображает прочитанную информацию в словарь, ключи которого задаются параметром fieldnames . Этот параметр является необязательным, но если он не указан в файле, данные первой строки становятся ключами словаря.

Пример:

1
2
3
4
5
import csv
with open(‘name.csv’) as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
         print(row[‘first_name’], row[‘last_name’])

Этот класс аналогичен классу DictWriter и выполняет противоположную функцию: запись данных в файл CSV. Класс определяется как csv. DictWriter ( csvfile , DictWriter csvfile , restval='' , extrasaction='raise' , dialect='excel' , *args , ** kwds )

Параметр fieldnames определяет последовательность ключей, которые определяют порядок, в котором значения в словаре записываются в файл CSV. В отличие от DictReader, этот ключ не является обязательным и должен быть определен во избежание ошибок при записи в CSV.

Диалект — это вспомогательный класс, используемый для определения параметров для конкретного экземпляра reader или writer . Диалекты и параметры форматирования должны быть объявлены при выполнении функции чтения или записи.

Есть несколько атрибутов, которые поддерживаются диалектом:

  • разделитель : строка, используемая для разделения полей. По умолчанию это ',' .
  • двойная кавычка : Управляет тем, как должны быть указаны кавычки, появляющиеся внутри поля. Может быть Верным или Ложным.
  • escapechar : строка, используемая автором для экранирования разделителя, если в QUOTE_NONE задано значение QUOTE_NONE .
  • lineterminator : строка, используемая для завершения строк, созданных writer . По умолчанию используется значение '\r\n' .
  • quotechar : строка, используемая для цитирования полей, содержащих специальные символы. По умолчанию '"' .
  • skipinitialspace : если установлено значение True , любые пробелы, следующие сразу за разделителем , игнорируются.
  • строгий : если установлено True , это вызывает ошибку исключения при неправильном вводе CSV.
  • цитирование : определяет, когда следует создавать кавычки при чтении или записи в CSV.

Давайте посмотрим, как читать CSV-файл, используя вспомогательные модули, которые мы обсуждали выше.

Создайте свой CSV-файл и сохраните его как example.csv. Убедитесь, что он имеет расширение .csv и заполните некоторые данные. Здесь у нас есть CSV-файл, который содержит имена учеников и их оценки.

Создание электронной таблицы для создания CSV

Ниже приведен код для чтения данных в нашем CSV с использованием функции csv.DictReader класса csv.DictReader .

1
2
3
4
5
6
7
import csv
 
with open(‘example.csv’) as File:
    reader = csv.reader(File, delimiter=’,’, quotechar=’,’,
                        quoting=csv.QUOTE_MINIMAL)
    for row in reader:
        print(row)

В приведенном выше коде мы импортируем модуль CSV, а затем открываем наш файл CSV в виде File . Затем мы определяем объект reader и используем метод csv.reader для извлечения данных в объект. Затем мы перебираем объект reader и извлекаем каждую строку наших данных.

Мы показываем прочитанные данные, печатая их содержимое на консоль. Мы также указали обязательные параметры, такие как разделитель, кавычка и цитирование.

Выход

1
2
3
4
[‘first_name’, ‘last_name’, ‘Grade’]
[‘Alex’, ‘Brian’, ‘B’]
[‘Rachael’, ‘Rodriguez’, ‘A’]
[‘Tom’, ‘smith’, ‘C’]

Как мы упоминали выше, DictWriter позволяет нам читать файл CSV, отображая данные в словарь вместо строк, как в случае с модулем csv.reader . Хотя имя поля является необязательным параметром, важно всегда помечать столбцы для удобства чтения.

Вот как читать CSV, используя класс DictWriter.

1
2
3
4
5
6
7
8
import csv
 
results = []
with open(‘example.csv’) as File:
    reader = csv.DictReader(File)
    for row in reader:
        results.append(row)
    print results

Сначала мы импортируем модуль csv и инициализируем результаты пустого списка, которые мы будем использовать для хранения полученных данных. Затем мы определяем объект reader и используем метод csv.DictReader для извлечения данных в объект. Затем мы перебираем объект reader и извлекаем каждую строку наших данных.

Наконец, мы добавляем каждую строку в список результатов и выводим содержимое на консоль.

Выход

1
2
3
4
5
[{‘Grade’: ‘B’, ‘first_name’: ‘Alex’, ‘last_name’: ‘Brian’},
{‘Grade’: ‘A’, ‘first_name’: ‘Rachael’, ‘last_name’: ‘Rodriguez’},
{‘Grade’: ‘C’, ‘first_name’: ‘Tom’, ‘last_name’: ‘smith’},
{‘Grade’: ‘B’, ‘first_name’: ‘Jane’, ‘last_name’: ‘Oscar’},
{‘Grade’: ‘A’, ‘first_name’: ‘Kennzy’, ‘last_name’: ‘Tim’}]

Как вы можете видеть выше, использование класса DictReader лучше, потому что он выдает наши данные в формате словаря, с которым легче работать.

Давайте теперь посмотрим, как csv.writer к записи данных в файл CSV с csv.writer функции csv.Dictwriter класса csv.Dictwriter обсуждались в начале этого урока.

Код ниже записывает данные, определенные в файл example2.csv .

01
02
03
04
05
06
07
08
09
10
11
12
import csv
 
myData = [[«first_name», «second_name», «Grade»],
          [‘Alex’, ‘Brian’, ‘A’],
          [‘Tom’, ‘Smith’, ‘B’]]
 
myFile = open(‘example2.csv’, ‘w’)
with myFile:
    writer = csv.writer(myFile)
    writer.writerows(myData)
     
print(«Writing complete»)

Сначала мы импортируем модуль csv, и функция writer() создаст объект, подходящий для записи. Чтобы перебрать данные по строкам, нам нужно будет использовать writerows() функция.

Вот наш CSV с данными, которые мы записали в него.

Наш CSV с данными мы написали к нему

Давайте напишем следующие данные в CSV.

1
2
3
4
5
data = [{‘Grade’: ‘B’, ‘first_name’: ‘Alex’, ‘last_name’: ‘Brian’},
{‘Grade’: ‘A’, ‘first_name’: ‘Rachael’, ‘last_name’: ‘Rodriguez’},
{‘Grade’: ‘C’, ‘first_name’: ‘Tom’, ‘last_name’: ‘smith’},
{‘Grade’: ‘B’, ‘first_name’: ‘Jane’, ‘last_name’: ‘Oscar’},
{‘Grade’: ‘A’, ‘first_name’: ‘Kennzy’, ‘last_name’: ‘Tim’}]

Код, как показано ниже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
import csv
 
with open(‘example4.csv’, ‘w’) as csvfile:
    fieldnames = [‘first_name’, ‘last_name’, ‘Grade’]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
 
    writer.writeheader()
    writer.writerow({‘Grade’: ‘B’, ‘first_name’: ‘Alex’, ‘last_name’: ‘Brian’})
    writer.writerow({‘Grade’: ‘A’, ‘first_name’: ‘Rachael’,
                     ‘last_name’: ‘Rodriguez’})
    writer.writerow({‘Grade’: ‘B’, ‘first_name’: ‘Jane’, ‘last_name’: ‘Oscar’})
    writer.writerow({‘Grade’: ‘B’, ‘first_name’: ‘Jane’, ‘last_name’: ‘Loive’})
 
print(«Writing complete»)

Сначала мы определим fieldnames , которые будут представлять заголовки каждого столбца в файле CSV. Метод writerrow() будет записывать по одной строке за раз. Если вы хотите записать все данные одновременно, вы будете использовать метод writerrows() .

Вот как можно записать все строки одновременно.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
import csv
 
with open(‘example5.csv’, ‘w’) as csvfile:
    fieldnames = [‘first_name’, ‘last_name’, ‘Grade’]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
 
    writer.writeheader()
    writer.writerows([{‘Grade’: ‘B’, ‘first_name’: ‘Alex’, ‘last_name’: ‘Brian’},
                      {‘Grade’: ‘A’, ‘first_name’: ‘Rachael’,
                          ‘last_name’: ‘Rodriguez’},
                      {‘Grade’: ‘C’, ‘first_name’: ‘Tom’, ‘last_name’: ‘smith’},
                      {‘Grade’: ‘B’, ‘first_name’: ‘Jane’, ‘last_name’: ‘Oscar’},
                      {‘Grade’: ‘A’, ‘first_name’: ‘Kennzy’, ‘last_name’: ‘Tim’}])
 
print(«writing complete»)

В этом руководстве рассматривается большинство вопросов, необходимых для успешного чтения и записи в файл CSV с использованием различных функций и классов, предоставляемых Python. CSV-файлы широко используются в программных приложениях, потому что они легко читаются и управляются, а их небольшой размер делает их относительно быстрой для обработки и передачи.

Не стесняйтесь, чтобы увидеть, что у нас есть в наличии для продажи и для изучения на рынке , и не стесняйтесь задавать любые вопросы и предоставить свой ценный отзыв, используя канал ниже.

Изучите Python с нашим полным руководством по питону, независимо от того, начинаете ли вы или начинающий программист, ищущий новые навыки.