CSV文件,是一种常用的文本格式,因为其格式简单、兼容性好,被广泛使用,特别是用于程序之间转换数据。
python也内置了csv模块,用来读写csv文件。
一、csv模块写入数据
语法:writer(csvfile, dialect=‘excel’,**fmtparams)
csvfile:文件对象
dialect:编码风格,默认为是excel,也就是用逗号(,)分隔,一般不去更改它。
**fmtparams:dialect格式参数,有delimter(分隔符,默认为逗号)
实例1:最简单的不加任何参数,直接写入一行数据–writerrow()
import csv
# 要写入的数据
data = ['wdewd', '2343243', 'python内置csv模块学习']
with open('test.csv', 'w') as f:
mywrite = csv.writer(f) # 返回一个writer对象
mywrite.writerow(data) # 一行一行的写入数据
结果如下:
注:open()函数打开当前路径下的文件名为test.csv的文件,如果当前路径下没有名为test.csv的文件,则会创建它。
实例2:一次写入多行数据—writerows()
import csv
# 创建一个二维列表,作为要写入的数据
data_list = []
for i in range(3):
data = [i, 'wdewd', '2343243', 'python内置csv模块学习']
data_list.append(data)
with open('test.csv', 'w') as f:
mywrite = csv.writer(f) # 返回一个writer对象
mywrite.writerows(data_list) # 一次写入多行数据
结果如下:
常见问题:在写入多行数据时,出现每一条数据都有一个空行
解决办法:在open()函数打开文件时,加一个newline=’’参数即可。
更改后代码:
import csv
# 创建一个二维列表,作为要写入的数据
data_list = []
for i in range(3):
data = [i, 'wdewd', '2343243', 'python内置csv模块学习']
data_list.append(data)
with open('test.csv', 'w', newline='') as f:
mywrite = csv.writer(f) # 返回一个writer对象
mywrite.writerows(data_list) # 一次写入多行数据
结果如下:
二、csv模块读取数据
语法:reader(csvfile, dialect=‘excel’, **fmtparams),参数含义同上。
实例1:读取刚刚写入的csv文件
import csv
with open('test.csv', 'r') as f:
res = csv.reader(f)
print('返回一个对象:', res)
print('转换为列表格式:', list(res))
结果如下:
常见使用问题:
with open('test.csv', 'rb') as f:
res = csv.reader(f)
print('返回一个对象:', res)
print('转换为列表格式:', list(res))
**错误原因:**使用了“b”二进制文件打开模式,csv文件是文本文件,不是二进制文件。
**解决办法:**使用“r”(默认是t)或者“rt”文件打开模式
常见文件打开模式:
打开模式 | 描述 |
---|---|
r | 以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错 |
w | 以只写模式打开文件,并将文件指针指向文件头;如果文件存在则将其内容清空,如果文件不存在则创建。 |
a | 以只追加可写模式打开文件,并将文件指针指向文件尾部;如果文件不存在则创建。 |
r+ | 在r的基础上增加了可写功能 |
w+ | 在w的基础上增加了可读功能 |
a+ | 在a的基础上增加了可读功能 |
b | 读写二进制文件(默认是t,表示文本),需要与上面几种模式搭配使用,如ab,wb, ab, ab+ |