python提供了大量的库,可以非常方便的进行各种操作,现在把python中实现读写csv文件的方法使用程序的方式呈现出来。

在编写python程序的时候需要csv模块或者pandas模块,其中csv模块使不需要重新下载安装的,pandas模块需要按照对应的python版本安装。

安装pandas的方式是:sudo pip install pandas

在这里,要注意,新建的文件名字不能是csv.py,否则方法会用不了,别问我怎么知道的…

复习一下读写模式

模式 作用
r 以读方式打开文件,可读取文件信息
w 已写方式打开文件,可向文件写入信息。如文件存在,则清空,再写入
a 以追加模式打开文件,打开文件可指针移至末尾,文件不存在则创建
a+ 以读写方式打开文件,文件指针移至末尾
r+ 以读写方式打开文件,可对文件进行读和写操作
w+ 消除文件内容,以读写方式打开文件
b 以二进制打开文件

用列表形式读写CSV

列表写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import csv

header = ['姓名','年龄','性别','电话']

data = [['道坤','21','男','181'],
['小璇','18','女','191'],
['阿福','18','男','171'],
]
# 设置newline,否则两行之间会空一行
with open ('个人信息.csv','w',encoding='utf-8',newline='') as csFile:
# 写
writer=csv.writer(csFile)
# 设置第一行标题头
writer.writerow(header)
# 将数据写入
writer.writerows(data)

image-20230102182334870

列表读取

语法:csv.reader(f, delimiter=‘,’)
reader为生成器,每次读取一行,每行数据为列表格式,可以通过delimiter参数指定分隔符

1
2
3
4
5
6
7
8
9
10
import csv

with open('个人信息.csv',encoding='utf-8')as csFile:
reader = csv.reader(csFile)
# 获取标题
header = next(reader)
print(header)
# 遍历数据
for i in reader:
print(i)

image-20230102182556967

用字典的形式读写

字典形式写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import csv

header = ['name','age','gender']

data = [{'name':'道坤','age':'21','gender':'男'},
{'name':'小璇','age':'18','gender':'女'},
{'name':'阿福','age':'19','gender':'男'}]

with open ('信息.csv','w',encoding='utf-8',newline='') as fp:
# 字典形式
writer =csv.DictWriter(fp,header)
# 写入标题
writer.writeheader()
# 将数据写入
writer.writerows(data)

image-20230102183125125

字典形式读取

语法:csv.DicReader(f, delimiter=‘,’)
直接将标题和每一列数据组装成有序字典(OrderedDict)格式,无须再单独读取标题行

1
2
3
4
5
6
import csv

with open('信息.csv',encoding='utf-8')as fp:
reader = csv.DictReader(fp)
for i in reader:
print(i)

image-20230102183300926

联合excel查看

编码格式要改成 gbk,必须是以列表的形式。

image-20230102184642610

读取

1
2
3
4
5
6
7
8
9
10
import csv

with open('个人信息.csv',encoding='gbk')as csFile:
reader = csv.reader(csFile)
# 获取标题
header = next(reader)
print(header)
# 遍历数据
for i in reader:
print(i)

image-20230102184728954

多行写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import csv

with open('个人信息.csv','a',encoding='gbk') as csFile:
writer = csv.writer(csFile)
# 多行写入
writer.writerows([['阿福1',17,'男','152'],['阿福2',16,'男','151'],['阿福3',15,'男','159']])


with open('个人信息.csv',encoding='gbk')as csFile:
reader = csv.reader(csFile)
# 获取标题
header = next(reader)
print(header)
# 遍历数据
for i in reader:
print(i)

image-20230102185355534

为什么会有空行腻?因为写入的时候没有设置newline,两行之间会空一行。

读取某行、某列

遍历每一行

1
2
3
4
5
6
with open('个人信息.csv',encoding='gbk')as csFile:
reader = csv.reader(csFile)
# 遍历每一行,生成列表
rows = [row for row in reader]
for row in rows:
print(row)

读取指定列

方法1
1
2
3
4
5
6
with open('个人信息.csv',encoding='gbk')as csFile:
reader = csv.reader(csFile)
# 遍历每一行,生成列表
rows = [row for row in reader]
for row in rows:
print(row[0],row[1])

image-20230102190323256

方法2
1
2
3
4
5
with open('个人信息.csv',encoding='gbk')as csFile:
reader = csv.reader(csFile)
# 遍历每一行,生成列表
column = [row[0] for row in reader]
print(column)

image-20230102191445235

方法3

使用DictReader,和reader函数类似,接收可迭代的对象,能返回一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值内,而这个字典的键则是这个单元格的标题.用下面的代码可以看到DictReader的结构

1
2
3
4
5
with open('个人信息.csv',encoding='gbk')as csFile:
reader = csv.DictReader(csFile)
# 遍历所有,生成字典
column = [row['姓名'] for row in reader]
print("指定列",column)

image-20230102192134882

读取指定元素

1
2
3
4
5
6
7
8
9
10
11
12

with open('个人信息.csv',encoding='gbk')as csFile:
reader = csv.reader(csFile)
# 遍历每一行,生成列表
rows = [row for row in reader]
row_list = []
for row in rows:
row_list.append(row)
# 查看指定行
print(row_list[1])
# 查看指定元素
print(row_list[1][0])

image-20230102191117063

新增一列

取出标题,内容。然后利用列表的特性新增。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import csv
with open('个人信息.csv','r',encoding='utf-8')as csFile:
reader = csv.reader(csFile)
data = [raw for raw in reader]
# 取出标题
header = data[0]
header.append('成绩')

# 取出内容
data = data[1:]
# print(data)
for i in data:
i.append(100)



# 设置newline,否则两行之间会空一行
with open ('个人信息1.csv','w',encoding='utf-8',newline='') as csFile:
# 写
writer=csv.writer(csFile)
# 设置第一行标题头
writer.writerow(header)
# 将数据写入
writer.writerows(data)

参考资料:(108条消息) 在python中读取和写入CSV文件(你真的会吗?)_苏凉.py的博客-CSDN博客_python csv

python读写csv文件方法详细总结_python_脚本之家 (jb51.net)