Python 如何读取CSV文件-学习笔记-5

2019-12-18 14:04 Python学习 期货哥

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

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

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

python 读取csv.jpg

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) 

如果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()方法,如此一来,就能确保已打开的文件被正确、安全地关闭。


发表评论: