(一)Python自带csv库
Python中内置csv库实现对csv文件的读写
import csv
(二)写入csv
写入csv要用到“写入器” ——> writer
1、一次性写一行(writerow函数)
# 写入操作(一次写一行)(列表写入)
with open('data.csv', 'w', encoding='utf-8-sig') as csvfile: # utf-8-sig让生成的csv文件带有DOM
writer = csv.writer(csvfile) # 生成一个“写手”
writer.writerow(['id', 'name', 'age']) # 一次写一行
writer.writerow(['01', 'xiaodai', 28])
writer.writerow(['02', 'xiaoshizi', 22])
2、一次性写多行(writerows函数)
# 写入操作(一次写多行)(列表写入)
with open('data.csv', 'a') as csvfile:
writer = csv.writer(csvfile, delimiter='+') # delimiter指定分隔符,默认是逗号,这里指定为加号
writer.writerows([
['id', 'name', 'age'],
['03', 'xiaopidan', 1],
['04', 'xiaolajiao', 1],
])
3、字典数据的写入(DictWriter类)
# 写入操作(一次写一行)(字典写入)
with open('data.csv', 'a', encoding='utf-8-sig') as csvfile: # utf-8可以写入中文
fieldnames = ['id', 'name', 'age'] # 可以将列名单独定义
writer = csv.DictWriter(csvfile, fieldnames=fieldnames) # 创建“写手”的时候就可以传入表头
writer.writerow({
'id': '05',
'name': '小呆',
'age': 28,
})
4、写入多行字典
# 写入操作(一次写多行)(取消空行)
with open('data.csv', 'a', encoding='utf-8', newline='') as csvfile:
"""
这通常是由于在写入CSV数据时,每行数据之间都会自动添加一个换行符,从而导致出现空行
要取消数据之间的空行,可以在写入CSV数据时指定newline=''
"""
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
data = [
{'id': '06', 'name': '小柿子', 'age': 22},
{'id': '07', 'name': '小皮蛋', 'age': 1},
{'id': '08', 'name': '小辣椒', 'age': 1},
]
writer.writerows(data)
(三)读取csv
读取csv要用到“读取器” ——> reader
with open('data.csv', 'r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile) # 生成读取器,是一个可迭代对象
for row in reader: # for循环遍历读取
print(row)
(四)常见问题
1、空行问题
原因:这通常是由于在写入CSV数据时,每行数据之间都会自动添加一个换行符,从而导致出现空行
解决方法:要取消数据之间的空行,可以在写入CSV数据时指定newline=''
open('data.csv', 'a', newline='')
2、中文问题
原因:没有指定UTF-8编码
解决方法:encoding='utf-8'
open('data.csv', 'a', encoding='utf-8')
3、CSV乱码问题
原因:Excel默认CSV带有DOM,而创建时没有指定带有DOM
解决方法:在创建一个带DOM的CSV ,传入encoding='utf-8-sig'即可
open('data.csv', 'a', encoding='utf-8-sig')