《Python 3.x入门到应用实践》 —3.8.2 读取CSV文件

举报
华章计算机 发表于 2020/02/08 23:38:07 2020/02/08
【摘要】 本节书摘来自华章计算机《Python 3.x入门到应用实践》 一书中第3章,第3.8.2节,作者是赵 军 等。

3.8.2  读取CSV文件

CSV文件是常见的开放数据(Open Data)格式。所谓开放数据,是指可以被自由使用和散布的数据,虽然有些开放数据要求用户标示数据源与所有人,但大部分政府数据的开放平台可以免费获取数据,这些开放数据会以常见的开放格式在网络上公开。不同的应用程序如果想要交换数据,必须借助通用的数据格式,CSV格式就是其中的一种,全名为Comma-Separated Values,字段之间以逗号“,”分隔,与TXT文件一样都是纯文本文件,可以用记事本等文本编辑器来编辑。

CSV格式常用在电子表格以及数据库,比如Excel文件可以将数据导出成CSV格式,也可以导入CSV文件进行编辑。网络上许多开放数据(Open Data)通常也会给用户提供直接下载的CSV格式数据,当大家学会了CSV文件的处理之后,就可以将这些数据用于更多的分析和应用了。

本范例程序使用的scores.csv文件内容如图3-17所示。

 image.png

图3-17

Python内建csv模块(module),能够非常轻松地处理CSV文件。csv模块是标准库模块,使用前必须先用import指令导入。下面来看csv模块的用法。

csv模块的用法

csv模块既可以读取CSV文件,也可以写入CSV文件,读取之前必须先打开CSV文件,再使用csv.reader方法读取CSV文件里的内容,代码如下:

import csv  #载入csv.py

 

with open("scores.csv", encoding="utf-8") as csvfile:  #打开文件指定为csvfile

    reader = csv.reader(csvfile)    #返回reader对象

    for row in reader:                #for循环逐行读取数据

        print(row)

上面程序的执行结果如图3-18所示。

 image.png

图3-18

如果CSV文件与.py文件放在不同的文件夹中,就必须加上文件的完整路径。

open()指令会将CSV文件开启并返回文件对象,范例程序中将文件对象赋值给csvfile变量,默认文件使用unicode编码,如果文件使用不同的编码,就必须使用encoding参数设置编码。本范例程序所使用的CSV文件是无BOM的utf-8格式,所以encoding="utf-8"。

csv.reader()函数会读取CSV文件,转成reader对象再返回给调用者,reader对象是可以迭代(iterator)处理的字符串(string)列表(List)对象。上面的程序中使用reader变量来接收reader对象,再通过for循环逐行读取数据:

reader = csv.reader(csvfile)   #返回reader对象

for row in reader:               #for循环逐行读取数据放入row变量中

列表对象是Python的容器数据类型(Container Type),它是一串由逗号分隔的值,用中括号“[]”括起来:

['方小花', '87', '100', '98']

上面的列表对象共有4个元素,使用中括号“[]”搭配元素的下标(index,或称为索引)就能存取每一个元素,下标从0开始,从左到右分别是row[0]、row[1]……。例如要获取第4个元素的值,可以如下表示:

name = row[3]

使用with语句打开文件

在读取或写入文件之前,必须先使用open()函数将文件打开;当读取或写入完成时,必须使用close()函数将文件关闭,以确保数据已被正确读出或写入文件。如果在调用close()方法之前发生异常,那么close()方法将不会被调用,举例来说:

f = open("scores.csv")  #打开文件

csvfile = f.read()       #读取文件内容

1 / 0                      #error

f.close()                 #关闭文件

第3行程序语句犯了分母为0的错误,执行到此,程序就会停止执行,所以close()不会被调用,这样可能会有文件损坏或数据遗失的风险。

有两特种方法可以避免这样的问题:一种方法是加上try…except语句捕获错误,另一种方法是使用with语句。Python的with语句配有特殊的方法,文件被打开之后,如果程序发生异常,就会自动调用close()方法,如此一来,就能确保已打开的文件被正确、安全地关闭。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。