Работа с CSV-файлами в Python

15.04.2018

Теги: CSVPythonWeb-разработка

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-разработка

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.