Сохранение данных Python - модуль CSV

CSV stands for comma separated values. Этот формат файла является широко используемым форматом данных при экспорте / импорте данных в / из электронных таблиц и таблиц данных в базах данных. Модуль csv был включен в стандартную библиотеку Python в результате PEP 305. Он представляет классы и методы для выполнения операций чтения / записи в файле CSV в соответствии с рекомендациями PEP 305.

CSV является предпочтительным форматом данных для экспорта в программе электронных таблиц Microsoft Excel. Однако модуль csv также может обрабатывать данные, представленные другими диалектами.

Интерфейс CSV API состоит из следующих классов писателя и читателя:

писатель ()

Эта функция в модуле csv возвращает объект записи, который преобразует данные в строку с разделителями и сохраняет их в файловом объекте. В качестве параметра функции требуется файловый объект с разрешением на запись. Каждая строка, записанная в файле, выдает символ новой строки. Чтобы предотвратить появление дополнительных пробелов между строками, параметр новой строки установлен на "".

Класс писателя имеет следующие методы -

writerow ()

Этот метод записывает элементы в итерацию (список, кортеж или строку), разделяя их запятой.

writerows ()

Этот метод принимает список итераций в качестве параметра и записывает каждый элемент как строку элементов, разделенных запятыми, в файл.

Example

В следующем примере показано использование функции writer (). Сначала файл открывается в режиме 'w'. Этот файл используется для получения объекта записи. Затем каждый кортеж в списке кортежей записывается в файл с помощью метода writerow ().

import csv
   persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   csvfile=open('persons.csv','w', newline='')
   obj=csv.writer(csvfile)
   for person in persons:
      obj.writerow(person)
csvfile.close()

Output

В текущем каталоге будет создан файл person.csv. Он покажет следующие данные.

Lata,22,45
Anil,21,56
John,20,60

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

csvfile=open('persons.csv','w', newline='')
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   obj=csv.writer(csvfile)
   obj.writerows(persons)
   obj.close()

читатель ()

Эта функция возвращает объект чтения, который возвращает итератор строк в csv file. Используя обычный цикл for, все строки в файле отображаются в следующем примере:

пример

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   for row in obj:
      print (row)

Вывод

['Lata', '22', '45']
['Anil', '21', '56']
['John', '20', '60']

Объект-читатель - это итератор. Следовательно, он поддерживает функцию next (), которую также можно использовать для отображения всех строк в файле csv вместоfor loop.

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   while True:
   try:
      row=next(obj)
      print (row)
   except StopIteration:
      break

Как упоминалось ранее, модуль csv использует Excel в качестве диалекта по умолчанию. Модуль csv также определяет класс диалекта. Диалект - это набор стандартов, используемых для реализации протокола CSV. Список доступных диалектов можно получить с помощью функции list_dialects ().

>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']

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

DictWriter ()

Эта функция возвращает объект DictWriter. Он похож на объект записи, но строки отображаются на объект словаря. Для функции требуется файловый объект с разрешением на запись и список ключей, используемых в словаре в качестве параметра fieldnames. Это используется для записи первой строки файла в качестве заголовка.

writeheader ()

Этот метод записывает список ключей в словаре в виде строки, разделенной запятыми, в качестве первой строки в файле.

В следующем примере определяется список элементов словаря. Каждый элемент в списке представляет собой словарь. Используя метод Writrows (), они записываются в файл через запятую.

persons=[
   {'name':'Lata', 'age':22, 'marks':45}, 
   {'name':'Anil', 'age':21, 'marks':56}, 
   {'name':'John', 'age':20, 'marks':60}
]
csvfile=open('persons.csv','w', newline='')
fields=list(persons[0].keys())
obj=csv.DictWriter(csvfile, fieldnames=fields)
obj.writeheader()
obj.writerows(persons)
csvfile.close()

Файл person.csv показывает следующее содержимое -

name,age,marks
Lata,22,45
Anil,21,56
John,20,60

DictReader ()

Эта функция возвращает объект DictReader из базового файла CSV. Как и в случае с объектом-читателем, этот объект также является итератором, с помощью которого извлекается содержимое файла.

csvfile=open('persons.csv','r', newline='')
obj=csv.DictReader(csvfile)

Класс предоставляет атрибут fieldnames, возвращающий ключи словаря, используемые в качестве заголовка файла.

print (obj.fieldnames)
['name', 'age', 'marks']

Используйте цикл над объектом DictReader для извлечения отдельных объектов словаря.

for row in obj:
   print (row)

Это приводит к следующему выводу -

OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])

Чтобы преобразовать объект OrderedDict в обычный словарь, мы должны сначала импортировать OrderedDict из модуля коллекций.

from collections import OrderedDict
   r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
   dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}