Работа с 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()
объекта записи для достижения того же результата.
После выполнения оператора в текущем рабочем каталоге создается with
CSV-файл ( ), содержащий эти значения, разделенные запятыми.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), как показано в наших примерах выше.