Работа с CSV-файлами в Python
15.04.2018
Теги: CSV • Python • Web-разработка
CSV — текстовой формат, ориентированный на работу с данными несложных электронных таблиц, хранящихся в обычных тестовых файлах. Модуль Python csv
упрощает синтаксический анализ (парсинг) CSV-файлов.
Чтение CSV-файлов
Файл example.csv
, из которого будем читать:
05.04.2015 13:34;Яблоки;73 05.04.2015 3:41;Вишни;85 06.04.2015 12:46;Груши;14
Чтобы прочитать данные из CSV-файла, необходимо создать объект Reader
, который обеспечивает возможность итерирования по строкам файла:
import csv exampleFile = open('example.csv', encoding = 'UTF-8') exampleReader = csv.reader(exampleFile, delimiter = ';') exampleData = list(exampleReader) print(exampleData) exampleFile.close()
[['05.04.2015 13:34', 'Яблоки', '73'], ['05.04.2015 3:41', 'Вишни', '85'], ['06.04.2015 12:46', 'Груши', '14']]
Теперь, когда у нас есть список списков, можно обращаться к отдельным ячейкам с помощью exampleData[row][col]
. В случае больших CSV-файлов целесообразно использовать объект Reader
в цикле for
. Тем самым удается избежать загрузки всего файла в оперативную память.
import csv exampleFile = open('example.csv', encoding = 'UTF-8') exampleReader = csv.reader(exampleFile, delimiter = ';') for row in exampleReader: string = 'Строка #' + str(exampleReader.line_num) + ' ' for value in row: string = string + value + ' ' print(string) exampleFile.close()
Строка #1 05.04.2015 13:34 Яблоки 73 Строка #2 05.04.2015 3:41 Вишни 85 Строка #3 06.04.2015 12:46 Груши 14
Для вывода номера строки используется свойство line_num
объекта Reader
. Цикл по объекту Reader
можно выполнить только один раз. Для повтороно чтения данных необходимо заново создать объект Reader
, вызвав метод csv.reader()
.
Запись CSV-файлов
import csv exampleFile = open('output.csv', 'w', encoding = 'UTF-8', newline = '') exampleWriter = csv.writer(exampleFile, delimiter = ';') exampleData = [['05.04.2015 13:34','Яблоки','73'], ['05.04.2015 3:41','Вишни','85'], ['06.04.2015 12:46','Груши','14']] for row in exampleData: exampleWriter.writerow(row) exampleFile.close()
Файл output.csv
:
05.04.2015 13:34;Яблоки;73 05.04.2015 3:41;Вишни;85 06.04.2015 12:46;Груши;14
При работе в Windows функции open()
надо передать именованный аргумент newline = ''
, иначе в файле output.csv
появятся лишние пустые строки. С помощью именованного аргумента lineterminator
метода csv.writer()
можно заменить разделитель строк.
Поиск: CSV • Python • Web-разработка