Сохранение данных 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'}