Работа с CSV-файлами в Python, с примерами

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

Файл CSV (значения, разделенные запятыми) — это формат текстового файла, который позволяет сохранять данные в табличной структуре. Это популярный формат, используемый для экспорта и импорта данных из баз данных и электронных таблиц.

Как следует из названия, каждая часть данных в CSV-файле отделяется запятой (,). Иногда термин «CSV» может использоваться для описания форматов с другими типами разделителей, такими как двоеточие (:), точка с запятой (;) и табуляция (\t). Для целей этой статьи мы будем иметь дело только с файлами CSV, в которых в качестве разделителей используются запятые (известные как RFC 4180).

При открытии содержимое CSV-файла выглядит следующим образом:

Employee Id,First Name,Gender,Start Date,Last Login Time,Salary,Bonus %,Senior Management,Team
1,Douglas,Male,8/6/1993,12:42 PM,,6.945,TRUE,Marketing
2,Thomas,Male,3/31/1996,6:53 AM,61933,4.17,,
3,Maria,Female,4/23/1993,11:17 AM,,11.858,FALSE,Finance
4,Jerry,Male,3/4/2005,1:00 PM,138705,9.34,,Finance

Как показано выше, разделитель-запятая , используется для разделения каждой конкретной части данных в файле.

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

CSV-модуль

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

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

Как читать файлы CSV с помощью Python

Модуль csv имеет csv.reader() функцию чтения файлов CSV. Он используется вместе с объектами (включая файловые объекты), такими как созданные с помощью встроенной open() функции Python.

Учитывая файловый объект из вызова open(), csv.reader() вернет объект чтения. Объект чтения можно использовать для перебора каждой строки данных CSV, где строки возвращаются в виде списка строк.

Возьмем пример:

import csv

with open('employees.csv', newline='') as file_obj:
    reader_obj = csv.reader(file_obj)
    for row in reader_obj:
        print(row)

Вот вывод кода выше:

['Employee Id', 'First Name', 'Gender', 'Start Date', 'Last Login Time', 'Salary', 'Bonus %', 'Senior Management', 'Team']
['1', 'Douglas', 'Male', '8/6/1993', '12:42 PM', '', '6.945', 'TRUE', 'Marketing']
['2', 'Thomas', 'Male', '3/31/1996', '6:53 AM', '61933', '4.17', '', '']
['3', 'Maria', 'Female', '4/23/1993', '11:17 AM', '', '11.858', 'FALSE', 'Finance']
['4', 'Jerry', 'Male', '3/4/2005', '1:00 PM', '138705', '9.34', '', 'Finance']
['5', 'Larry', 'Male', '1/24/1998', '4:47 PM', '101004', '1.389', 'TRUE', 'Client Services']
...

Из первого фрагмента кода employees.csv открывается файл, после чего csv.reader() функция анализирует его и возвращает объект-читатель. Простой цикл for используется для перебора объекта чтения, который возвращает список данных из каждой строки файла employees.csv, начиная сверху.

Как писать в CSV-файлы с помощью Python

Помимо чтения данных из файлов CSV, мы также можем записывать данные в эти файлы в Python. Функция csv.writer()позволяет нам записывать данные в формат CSV. После открытия файла в режиме записи csv.writer()функция возвращает объект записи, который преобразует предоставленные данные в строки с разделителями в предоставленном файловом объекте. Объект записи имеет writerow()метод для записи строки — итерацию строк или чисел, разделенных запятыми, значений за раз — в то время как метод writerows()используется для нескольких строк одновременно. Методы writerow()и writerows()— это только два варианта записи данных в CSV-файл.

Все объекты списка, используемые в приведенном выше фрагменте кода, можно сгруппировать в двумерный список и передать в качестве аргумента методу writerows()объекта записи для достижения того же результата.

После выполнения оператора в текущем рабочем каталоге создается withCSV-файл ( ), содержащий эти значения, разделенные запятыми.products.csv

Вот пример:

import csv

with open('products.csv', 'w', newline='') as file_obj:
    writer_obj = csv.writer(file_obj)
    writer_obj.writerow(['Product Name', 'Price', 'Quantity', 'SKU Number' ])
    writer_obj.writerow(['Rice', 80, 35, 'RI59023'])
    writer_obj.writerow(['Curry', 2, 200, 'CY13890'])
    writer_obj.writerow(['Milk', 9.5, 315, 'MK10204'])

Вот вывод кода выше:

Product Name,Price,Quantity,SKU Number
Rice,80,35,RI59023
Curry,2,200,CY13890
Milk,9.5,315,MK10204

Как преобразовать CSV в JSON с помощью Python

При выполнении файловых операций ввода-вывода нам может понадобиться преобразовать файл CSV в формат JSON , который популярен для получения и передачи данных между клиентом и сервером. Модуль csv предоставляет csv.DictReader класс, который поможет нам в этом.

Методы csv.DictReader класса помогают преобразовать заданный файл CSV в словарь Python перед применением функции модуля jsonjson.dump() для преобразования результирующего словаря Python в файл JSON. Класс csv.DictReader() принимает необязательный fieldnames аргумент. Если имена полей опущены, значения из первой строки будут сопоставлены с остальными данными в виде имен полей.

Давайте рассмотрим пример:

import csv
import json

my_dict = {}

with open('employees.csv', newline='') as file_obj:
    reader_object = csv.DictReader(file_obj)
    for row in reader_object:
        key = row['Employee Id']
        my_dict[key] = row

with open('employee.json', 'w', encoding='utf-8') as file_obj:
    json.dump(my_dict, file_obj, indent=4)   

Вот вывод кода выше:

"1": {
    "Employee Id": "1",
    "First Name": "Douglas",
    "Gender": "Male",
    "Start Date": "8/6/1993",
    "Last Login Time": "12:42 PM",
    "Salary": "",
    "Bonus %": "6.945",
    "Senior Management": "TRUE",
    "Team": "Marketing"
},
"2": {
    "Employee Id": "2",
    "First Name": "Thomas",
    "Gender": "Male",
    "Start Date": "3/31/1996",
    "Last Login Time": "6:53 AM",
    "Salary": "61933",
    "Bonus %": "4.17",
    "Senior Management": "",
    "Team": ""
},
...

Чтобы преобразовать файл CSV в эквивалент JSON, мы применили следующие шаги:

  • открыли employees.csv файл в режиме чтения
  • создали словарь Python из возвращенного файлового объекта, используя csv.DictReaderкласс
  • открыли файл JSON в режиме записи, например employees.json(если бы такого файла не существовало, он был бы создан)
  • использовали dump() функцию модуля json для преобразования словаря Python (my_dict) в файл JSON

Как преобразовать JSON в CSV с помощью Python

В этом разделе мы рассмотрим, как преобразовать данные из файла JSON в формат CSV. Для этого мы будем использовать встроенные модули csv и json Python. Функция модуля jsonjson.load() поможет преобразовать файл JSON в словарь Python, а методы класса модуля csvcsv.DictWiter помогут преобразовать словарь Python в файл CSV.

Вот пример:

import csv
import json

py_dict = {}

# convert json file to python dictionary
with open('employees.json', 'r', encoding='utf-8') as file_obj:
    py_dict = json.load(file_obj)

# convert write python dictionary to csv
with open('employees_records.csv', 'w', newline='') as file_obj:
    csv_writer = csv.DictWriter(file_obj, fieldnames=py_dict['1'].keys())
    csv_writer.writeheader()
    for key in py_dict.keys():
        csv_writer.writerow(py_dict[key])

Чтобы преобразовать файл JSON в эквивалент CSV, мы применили следующие шаги:

  • открыли employees.json файл в режиме чтения
  • использовал json.load() функцию для создания словаря Pythonpy_dict
  • открыл файл CSV employees_records.csv в режиме записи (если бы такого файла не существовало, он был бы создан)
  • создал объект записи с csv.DictWriter классом с необходимыми аргументами
  • использовали методы объекта записи для сопоставления словарей с соответствующим количеством строк

Заключение

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

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

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