python之CSV模块
csv文件
0. csv文件介绍
csv文件格式是一种通用的电子表格和数据库导入导出格式。最近我调用RPC处理服务器数据时,经常需要将数据做个存档便使用了这一方便的格式。
python中有一个读写csv文件的包,直接import csv即可。利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下。
1. 写入文件
我们把需要写入的数据放到列表中,写文件时会把列表中的元素写入到csv文件中。
import csv
ll = [[1, 2, 3, 4],
[1, 2, 3, 4],
[5, 6, 7, 8],
[5, 6, 7, 8]]
with open('example1.csv', 'w', newline='') as csv_file:
# csv_write csv写入对象
csv_write = csv.writer(csv_file,delimiter=',')
"""
delimiter=',' 分割符,默认就是逗号
"""
for l in ll:
csv_write.writerow(l) # 按行写入
可能遇到的问题:直接使用这种写法会导致文件每一行后面会多一个空行。使用
newline=''
解决
使用 open 直接写入
with open('example2.csv', 'w') as csvfile:
"""
delimiter: 分割符
"""
for l in ll:
csvfile.write(",".join(map(str, l)))
csvfile.write('
')
注意:
当用writer写数据时, None
会被写成空字符串,浮点类型会被调用 repr()
方法转化成字符串。所以非字符串类型的数据会被 str()
成字符串存储。所以当涉及到 unicode
字符串时,可以自己手动编码后存储或者使用csv提供的 UnicodeWriter
。
2 读取文件
-
通过
csv_read
对象读取数据import csv with open('example.csv', encoding='utf-8') as f: csv_reader = csv.reader(f) for row in csv_reader: print(row) # 返回一个列表,列表中的每个元素都是单元格的值
3. 写入字典
csv
还提供了一种类似于字典方式的写,方式如下:
class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)
举个栗子:
import csv
with open('names.csv', 'w',encoding='utf-8') as csvfile:
# 键有什么作用(键不能少,数据里面的字典可以少)
fieldnames = ['first_name', 'last_name']
# 创建一个写入对象,(csvfile="文件对象", fieldnames="表头")
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
# 通过字典写入数据,key若不存在写入空
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
writer.writerow({'first_name': 'Lovely'})
writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
4. 读取字典
直接看代码:
import csv
with open('names.csv', 'r', newline="", encoding='utf-8') as f:
# 实例化一个读对象
csv_dict_read = csv.DictReader(f)
# 通过循环对象读取数据
for item in csv_dict_read:
# 通过字典['key']取值
print(item['first_name'], item['last_name'])
# item是一个有序字典
print(item, item['last_name'])