CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 “,” 分隔的一列列的数据构成的。
Python读取CSV文档
Python的库csv
就是处理CSV文档的一个非常强大的库,我们要处理CSV文档,必须先导入它。
import csv
# 读取csv至字典
csvFile = open("instance.csv", "r")
reader = csv.reader(csvFile)
# 建立空字典
result = {}
for item in reader:
# 忽略第一行
if reader.line_num == 1:
continue
result[item[0]] = item[1]
csvFile.close()
print(result)
首先,跟文本文件一样,需要 open()
函数将CSV文档打开,我在此将打开方式定义为只读。然后通过csv.reader()
函数建立一个读入数据的对象,我起名为reader
建立的数据是个一对一的关系型数据,那索性就通过字典这种结构完成数据的读取,所以,建立了一个空字典result(后面会讲csv自带的将CSV文档读取为字典的函数)
reader对象其实就是由CSV文档的多行数据构成的,每行数据会有一个属性:line_num
表示行数,显然,刚才的数据第一行”name,score”只是数据说明,我们忽略掉。
如果用for循环迭代访问reader,我们会发现,每一行都是一个列表,列表的每个元素就是CSV文档的每一行中 “,” 分隔开的数据。比如:
import csv
csvFile = open("instance.csv", "r")
reader = csv.reader(csvFile)
for item in reader:
print(item) # >>> ['name', 'score']
# >>> ['Zhang', '100']
# >>> ['Wang', '80']
# >>> ['Li', '90']
Python写入CSV文档
(1)直接写入
当然也可以将数据写入CSV文档,我们可以将数据以列表的形式写入:
import csv
# 文件头,一般就是数据名
fileHeader = ["name", "score"]
# 假设我们要写入的是以下两行数据
d1 = ["Wang", "100"]
d2 = ["Li", "80"]
# 写入数据
csvFile = open("instance.csv", "w")
writer = csv.writer(csvFile)
# 写入的内容都是以列表的形式传入函数
writer.writerow(fileHeader)
writer.writerow(d1)
writer.writerow(d1)
csvFile.close()
当然,每次写完一行之后,会自动换行,所以,写结果就是我们想要的形式:
需要注意的是最后还有一个空行。
当然,像这种写入多行的情况,可以用更方便的函数 writerows()
,还是上面的例子,可以把三行写入的代码,换成以下一行。但是传入的参数是一个列表,每个元素代表需要写入的每行数据。得到的结果和上面是一样的。
writer.writerows([fileHeader, d1, d2])
(2)追加
除了直接写入,还能实现追加:还是刚才那个例子,我现在将一行新的数据添加到旧的数据后面,最后写入CSV
import csv
# 新增的数据行,以列表的形式表示
add_info = ["Guo", 150]
# 以添加的形式写入csv,跟处理txt文件一样,设定关键字"a",表追加
csvFile = open("instance.csv", "a")
# 新建对象writer
writer = csv.writer(csvFile)
# 写入,参数还是列表形式
writer.writerow(add_info)
csvFile.close()