如何在Python中读取和写入CSV文件

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时出错。

方言和格式

方言是帮助程序类,用于定义特定readerwriter 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

以下是使用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,以及我们写入的数据。

我们的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

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值