使用Python读写CSV文件
CSV(代表逗号分隔值)格式是电子表格常用的数据格式。Python标准库中的csv模块提供用于在CSV文件上执行读/写操作的类和方法。
作家()
csv模块中的此函数返回writer对象,该对象将数据转换为定界字符串并存储在文件对象中。该函数需要具有写许可权作为参数的文件对象。文件中写入的每一行都使用换行符。为防止行之间有多余的空格,将newline参数设置为''。
writer类具有以下方法
writerow()
此函数以可迭代的方式(列表,元组或字符串)写入项目,并以逗号分隔。
writerows()
此函数将可迭代项的列表作为参数,并将每个项目作为逗号分隔的项目行写入文件中。
以下示例显示了write()
方法的使用。首先,以“w”模式打开文件。此文件用于获取writer对象。然后使用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()
这将在当前目录中创建“persons.csv”文件。它将显示以下数据。
Lata,22,45 Anil,21,56 John,20,60
遍历列表以分别写入每一行的writerows()
方法,我们可以使用方法。
>>> csvfile = open('persons.csv','w', newline='') >>> obj = csv.writer(csvfile) >>> obj.writerows(persons) >>> obj.close()
读()
此函数返回一个reader对象,该对象返回csv文件中的行迭代器。使用常规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']
由于reader对象是一个迭代器,因此内置next()
函数对于显示csv文件中的所有行也很有用。
>>> csvfile = open('persons.csv','r', newline='') >>> obj = csv.reader(csvfile) >>> while True: try: row=next(obj) print (row) except StopIteration: break
csv模块还定义了方言类。方言是用于实施CSV协议的一组标准。可用的方言列表可以通过list_dialects()函数获得。
>>> csv.list_dialects() ['excel', 'excel-tab', 'unix']
DictWriter()
此函数返回DictWriter对象。它与writer对象相似,但行被映射到字典对象。该函数需要一个具有写权限的文件对象,以及在字典中用作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()
该文件显示以下内容。
name,age,marks Lata,22,45 Anil,21,56 John,20,60
DictReader()
此函数从基础CSV文件返回DictReader对象。与阅读器对象一样,它也是一个迭代器,使用该迭代器可以检索文件的内容。
>>> csvfile = open('persons.csv','r', newline='') >>> obj = csv.DictReader(csvfile)
该类提供fieldnames属性,返回用作文件头的字典键。
>>> 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对象转换为普通字典,我们必须首先从collections模块导入OrderedDict。
>>> from collections import OrderedDict >>> r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')]) >>> dict(r) {'name': 'Lata', 'age': '22', 'marks': '45'}
在本文中,已经解释了csv模块的功能。