Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Возможности библиотеки csv Python
По данной теме решил не делать видео. Мне показалось, что она больше подходить для текстового изложения.
О формате CSV
Формат csv вообще довольно известен. Чаще всего он используется в связи с электронными таблицами. Соответственно все программы, которые создают электронные таблицы (LibreOffice Calc, Excel и т.д.) этим форматом владеют. Т.е. могут создавать csv-файлы и могут их читать, преобразую в электронную таблицу.
Формат csv описывает простой текстовый файл, который можно использовать для передачи данных между программами. Но есть одно затруднение. Формат плохо стандартизован и обработка этого формата разными программами может несколько отличаться друг от друга.
В общем случае файл csv состоит из нескольких текстовых строк. Каждая строка состоит из полей, которые отделены друг от друга каким-либо разделителем. Обычно этим разделителем является запятая, но могут быть и другие символы, например, точка с запятой. Последний, кстати, более предпочтителен, если внутри полей запятая используется для других целей, например, в написании вещественных чисел.
Количество полей в каждой строке должно быть одинаково. Если поле пустое, то разделители должны идти друг за другом. Строка не должна заканчиваться разделителем. Первая строка обычно трактуется как строка заголовков столбцов. Столбец образуется полями с одинаковыми номерами. В случае, если внутри поля следует указывать символ разделитель, то поле должно заключаться в двойные кавычки. Если внутри поля должны стоять двойные кавычки, то они должны быть экранированы другими двойными кавычками.
Вот краткое описание формата csv, теперь посмотрим примеры обработки этого формата.
Примеры обработки формата CSV на Python с использованием библиотеки csv
Рассмотрим следующую таблицу
ФИО;Должность;Год рождения;Зарплата
Петров И.И.;директор;1990;70000
Иванов П.П. ;зам.директора;1980;65000
Минин И.И.;гл.инженер;1987;65000
Котова А.А.;Гл.бухгалтер;1991;60000
Малинин А.А.;Гл.экономист;1988;57000
Матюхин А.А.;Слесарь-программист;1999;100000
Кошкина А.А.;повар;1920;120000
Ниже представлен пример программы на Python чтения этой таблицы из файла 'Таблица1.csv' с использованием стандартной библиотеки csv.
Результат выполнения программы
['ФИО', 'Должность', 'Год рождения', 'Зарплата']
['Петров И.И.', 'директор', '1990', '70000']
['Иванов П.П. ', 'зам.директора', '1980', '65000']
['Минин И.И.', 'гл.инженер', '1987', '65000']
['Котова А.А.', 'Гл.бухгалтер', '1991', '60000']
['Малинин А.А.', 'Гл.экономист', '1988', '57000']
['Матюхин А.А.', 'Слесарь-программист', '1999', '100000']
['Кошкина А.А.', 'повар', '1920', '120000']
Как видим, мы получили список списков, каждый из которых состоит из полей csv-файла и соответствует одной его строке.
Мы указали encoding='utf-8'. Для меня это не важно, так как я проверяю программу в Linux, где utf-8 работает по-умолчанию. Но об этой опции не стоит забывать.
Как вы, наверное, уже догадались csv.reader() тот самый метод, который читает строки файла и их интерпретирует. В результате создается объект-итератор, который потом можно использовать в частности так, как это показано в программе.
Следующий пример демонстрирует чрезвычайно удобный метод DictReader(), который преобразует csv-текст в список словарей, ключами которых будут названия столбцов.
Для таблицы из предыдущего примера получим
[{'ФИО': 'Петров И.И.', 'Должность': 'директор', 'Год рождения': '1990', 'Зарплата': '70000'}, {'ФИО': 'Иванов П.П. ', 'Должнос
ть': 'зам.директора', 'Год рождения': '1980', 'Зарплата': '65000'}, {'ФИО': 'Минин И.И.', 'Должность': 'гл.инженер', 'Год рожде
ния': '1987', 'Зарплата': '65000'}, {'ФИО': 'Котова А.А.', 'Должность': 'Гл.бухгалтер', 'Год рождения': '1991', 'Зарплата': '600
00'}, {'ФИО': 'Малинин А.А.', 'Должность': 'Гл.экономист', 'Год рождения': '1988', 'Зарплата': '57000'}, {'ФИО': 'Матюхин А.А.'
, 'Должность': 'Слесарь-программист', 'Год рождения': '1999', 'Зарплата': '100000'}, {'ФИО': 'Кошкина А.А.', 'Должность': 'пова
р', 'Год рождения': '1920', 'Зарплата': '120000'}]
Петров И.И. - директор
Иванов П.П. - зам.директора
Минин И.И. - гл.инженер
Котова А.А. - Гл.бухгалтер
Малинин А.А. - Гл.экономист
Матюхин А.А. - Слесарь-программист
Кошкина А.А. - повар
Наконец последний в нашей статье пример. Программа читает csv-файл с тем же содержанием, но другим разделителем. Для этого в начале создаётся объект с помощью метода writer(). А непосредственная запись в файл осуществляется с помощью метода writerow() этого объекта. Обратите внимание на параметр lineterminator, который определяет разделитель между строками. В качестве этого разделителя можно взять любую строку, но обычно это '\n'.
В результате появится файл Таблица2.csv с содержимым
ФИО/Должность/Год рождения/Зарплата
Петров И.И./директор/1990/70000
Иванов П.П. /зам.директора/1980/65000
Минин И.И./гл.инженер/1987/65000
Котова А.А./Гл.бухгалтер/1991/60000
Малинин А.А./Гл.экономист/1988/57000
Матюхин А.А./Слесарь-программист/1999/100000
Кошкина А.А./повар/1920/120000
Пока всё. Наверное, я еще обращусь к библиотеке csv.
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.