CSV格式是数据库和电子表格最常用的导入和导出格式。 本教程将详细介绍CSV以及可用于将数据读取和写入CSV文件的模块和类。 它还将介绍一个工作示例,向您展示如何在Python中读取数据并将数据写入CSV文件。
什么是CSV文件?
CSV(逗号分隔值)文件允许将数据保存在扩展名为.csv的表格结构中。 CSV文件已被广泛用于电子商务应用程序,因为它们被认为非常易于处理。 使用它们的一些领域包括:
- 导入和导出客户数据
- 进出口产品
- 出口订单
- 导出电子商务分析报告
读写器模块
CSV模块具有几个可用于读写CSV的功能和类,它们包括:
- csv.reader函数
- csv.writer函数
- csv.Dictwriter类
- csv.DictReader类
CSV阅读器
csv.reader模块采用以下参数:
-
csvfile
:这通常是一个支持迭代器协议的对象,通常在每次调用__next__()
方法时都返回一个字符串。 -
dialect='excel'
:一个可选参数,用于定义特定于特定CSV方言的一组参数。 -
fmtparams
:一个可选参数,可用于覆盖现有的格式设置参数。
这是有关如何使用csv.reader模块的示例。
import csv
with open('example.csv', newline='') as File:
reader = csv.reader(File)
for row in reader:
print(row)
csv.writer模块
此模块类似于csv.reader模块,用于将数据写入CSV。 它包含三个参数:
-
csvfil e
:这 能够 是带有write()
方法的任何对象。 -
dialect='excel'
:一个可选参数,用于定义特定于特定CSV的一组参数。 -
fmtparam
:可选参数,可用于覆盖现有的格式设置参数。
DictReader和DictWriter类
DictReader和DictWriter是Python中可用的用于读取和写入CSV的类。 尽管它们类似于读取器和写入器功能,但是这些类使用字典对象来读取和写入csv文件。
DictReader
它创建一个对象,该对象将读取的信息映射到字典中,该字典的关键字由fieldnames
参数指定。 此参数是可选的,但是在文件中未指定时,第一行数据将成为字典的键。
例:
import csv
with open('name.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['first_name'], row['last_name'])
DictWriter
此类类似于DictWriter类别,但与此相反,它将数据写入CSV文件。 该类定义为csv.
DictWriter
(
csvfile
,
fieldnames
,
restval=''
,
extrasaction='raise'
,
dialect='excel'
,
*args
,
**
kwds
)
fieldnames
参数定义了键序列,这些键序列标识字典中的值写入CSV文件的顺序。 与DictReader不同,此键不是可选的,必须定义该键以避免在写入CSV时出错。
方言和格式
方言是帮助程序类,用于定义特定reader
或writer
reader
实例的参数。 执行读取器或写入器功能时,必须声明方言和格式设置参数。
方言支持几种属性:
- delimiter :用于分隔字段的字符串。 默认为
','
。 - 双引号 :控制出现在字段中的quotechar实例的引用方式。 可以是对或错。
- escapechar :如果引用设置为
QUOTE_NONE
,则编写者使用的用于转义分隔符的QUOTE_NONE
。 - lineterminator:一个字符串用于终止由所述生产线
writer
。 默认为'\r\n'
。
- quotechar :一个字符串,用于引用包含特殊字符的字段。 默认为
'"'
。 - skipinitialspace :如果设置为
True
,则定界符之后的任何空白都将被忽略。 - 严格 :如果设置为
True
,如果输入错误的 CSV会引发异常Error 。 - quoting :控制在读取或写入CSV时应何时生成引号。
读取CSV文件
让我们看看如何使用上面讨论的帮助程序模块读取CSV文件。
创建您的CSV文件并将其另存为example.csv。 确保它具有.csv
扩展名并填写一些数据。 在这里,我们有一个CSV文件,其中包含学生的姓名及其成绩。
以下是使用csv.reader
函数和csv.DictReader
类读取CSV数据的代码。
使用csv.reader读取CSV文件
import csv
with open('example.csv') as File:
reader = csv.reader(File, delimiter=',', quotechar=',',
quoting=csv.QUOTE_MINIMAL)
for row in reader:
print(row)
在上面的代码中,我们导入CSV模块,然后将CSV文件作为File
打开。 然后,我们定义阅读器对象,并使用csv.reader
方法将数据提取到对象中。 然后,我们遍历reader
对象并检索数据的每一行。
我们通过将读取的数据打印到控制台来显示读取的数据。 我们还指定了必需的参数,例如定界符,quotechar和quoting。
输出量
['first_name', 'last_name', 'Grade']
['Alex', 'Brian', 'B']
['Rachael', 'Rodriguez', 'A']
['Tom', 'smith', 'C']
使用DictReader读取CSV文件
如上所述,DictWriter允许我们通过将数据映射到字典而不是字符串(如csv.reader
模块的情况)映射到字典来读取CSV文件。 尽管字段名是一个可选参数,但始终为您的列添加标签以提高可读性很重要。
这是使用DictWriter类读取CSV的方法。
import csv
results = []
with open('example.csv') as File:
reader = csv.DictReader(File)
for row in reader:
results.append(row)
print results
我们首先导入csv模块并初始化一个空列表results
,该results
将用于存储检索到的数据。 然后,我们定义阅读器对象,并使用csv.DictReader
方法将数据提取到对象中。 然后,我们遍历reader
对象并检索数据的每一行。
最后,我们将每一行添加到结果列表,然后将内容打印到控制台。
输出量
[{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'},
{'Grade': 'A', 'first_name': 'Rachael', 'last_name': 'Rodriguez'},
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'},
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'},
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}]
正如您在上面看到的,使用DictReader类更好,因为它以更易于使用的字典格式提供了我们的数据。
写入CSV文件
现在,让我们看看如何使用本教程开头讨论的csv.writer
函数和csv.Dictwriter
类将数据写入CSV文件。
使用csv.writer写入CSV文件
下面的代码将定义的数据写入example2.csv
文件。
import csv
myData = [["first_name", "second_name", "Grade"],
['Alex', 'Brian', 'A'],
['Tom', 'Smith', 'B']]
myFile = open('example2.csv', 'w')
with myFile:
writer = csv.writer(myFile)
writer.writerows(myData)
print("Writing complete")
首先,我们导入csv模块,然后writer()
函数将创建一个适合写入的对象。 要遍历行中的数据,我们将需要使用writerows()
功能。
这是我们的CSV,以及我们写入的数据。
使用DictWriter写入CSV文件
让我们将以下数据写入CSV。
data = [{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'},
{'Grade': 'A', 'first_name': 'Rachael', 'last_name': 'Rodriguez'},
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'},
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'},
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}]
代码如下所示。
import csv
with open('example4.csv', 'w') as csvfile:
fieldnames = ['first_name', 'last_name', 'Grade']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'})
writer.writerow({'Grade': 'A', 'first_name': 'Rachael',
'last_name': 'Rodriguez'})
writer.writerow({'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'})
writer.writerow({'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Loive'})
print("Writing complete")
我们首先定义fieldnames
,它将代表CSV文件中每一列的标题。 writerrow()
方法将一次写入一行。 如果要一次写入所有数据,将使用writerrows()
方法。
这是一次写入所有行的方法。
import csv
with open('example5.csv', 'w') as csvfile:
fieldnames = ['first_name', 'last_name', 'Grade']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows([{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'},
{'Grade': 'A', 'first_name': 'Rachael',
'last_name': 'Rodriguez'},
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'},
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'},
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}])
print("writing complete")
结论
本教程介绍了使用Python提供的不同功能和类成功读取和写入CSV文件所需的大部分内容。 CSV文件已被广泛地用于软件应用程序中,因为它们易于读取和管理,并且其较小的尺寸使得它们相对较快地进行处理和传输。
不要犹豫,看看我们在市场上可以出售和学习的东西 ,也不要犹豫,使用下面的提要来问任何问题并提供宝贵的反馈。
无论您是刚刚起步还是想学习新技能的经验丰富的程序员,都可以通过我们完整的python教程指南学习Python。
翻译自: https://code.tutsplus.com/tutorials/how-to-read-and-write-csv-files-in-python--cms-29907