龙空技术网

青少年Python编程系列24:Python中读写csv文件基础

凤城老人 398

前言:

如今同学们对“怎么保存csv格式”可能比较着重,看官们都想要学习一些“怎么保存csv格式”的相关文章。那么小编同时在网摘上搜集了一些关于“怎么保存csv格式””的相关文章,希望姐妹们能喜欢,同学们一起来学习一下吧!

前面一讲中,我们已经讲了如何对文件进行读写的操作,我们这节课专门针对一种保存数据时非常常用的文件格式进行讲解。这种文件扩展名为.csv,也叫做逗号分隔符文件。这种文件可以使用记事本、excel等多种软件打开,用于存储数据。

一、csv文件的格式

在csv文件中,同一行的数据直接使用“,”分隔。一行可以显示多个数据。如果文件有多行,就可以构成一个二维的数据。我们看下面的表格:

姓名

语文

数学

英语

马钰

98

97.5

96

丘处机

96.5

92

94

王处一

92

89

91.5

孙不二

87.5

86

92.5

这个文件存储在csv格式中以如下形式显示:

姓名,语文,数学,英语

马钰,98,97.5,96

丘处机,96.5,92,94

王处一,92,89,91.5

孙不二,87.5,86,92.5

当然,csv格式的文件如果使用excel打开,也会以表格的形式显示。

二、一维数据在csv文件中的读写2.1 数据的保存

一维数据在Python中以列表的形式存在,而csv格式的文件中,我们使用的是逗号分隔的字符串,在保存到文件中时,我们需要将数据进行转换。我们看下面的例子:

c = ['北京','上海','广州','深圳']f = open('city.csv', 'w')f.write(','.join(c) + '\n')f.close()

使用join()方法,将列表中的元素使用逗号连接成字符串,记住末尾一定要添加换行符哦!当然,我们也可以使用with语句书写:

c = ['北京','上海','广州','深圳']with open('city.csv','w')  as f:    f.write(','.join(c) + '\n')
2.2 数据的读取

数据读取的时候,我们进行了反向的操作,读取到的是所有数据以逗号为分隔符的字符串,我们需要将它转换成列表保存。我们看一下例子:

f = open('city.csv', 'r')c = f.read().strip().split(',')f.close()print(c)

由于从文件读取出来的字符串有换行符,我们先要使用strip()方法将换行符删了,再使用split()方法将数据以逗号为分隔符拆分成列表。同样我们可以可以用with语句书写:

with open('city.csv','r')  as f:    c = f.read().strip().split(',')print(c)
三、二维数据在csv文件中的读写

二维数据由多个一维数据构成,是一维数据的组合形式,可以用二维列表表示。列表的每个元素对应二维数据的一行,这个元素本身也是列表。二维数据一般采用相同的数据类型存储数据。

二维数据的表示:

c = [        ['乔峰', '95', '98', '78', '65'],        ['虚竹', '85', '89', '68', '93'],        ['段誉', '99', '89', '86', '90']    ]

将二维数据保存到csv格式存储,csv文件的每一行是一个一维数据,整个csv文件是一个二维数据。

csv文件中二维数据存储的样式:

乔峰,95,98,78,65

虚竹,85,89,68,93

段誉,99,89,86,90

3.1 二维数据的保存

二维数据写入时,我们可以使用循环遍历列表并一行一行写入,每一行写入一个一维数据。具体操作方式如下:

c = [        ['乔峰', '95', '98', '78', '65'],        ['虚竹', '85', '89', '68', '93'],        ['段誉', '99', '89', '86', '90']    ]f = open('score.csv', 'w')for i in c:    f.write(','.join(i) + '\n')f.close()

同样也可以使用with语句书写:

c = [        ['乔峰', '95', '98', '78', '65'],        ['虚竹', '85', '89', '68', '93'],        ['段誉', '99', '89', '86', '90']    ]with open('score.csv', 'w') as f:    for i in c:        f.write(','.join(i) + '\n')
3.2 二维数据的读取

二维数据的读取操作与写入操作正好相反,我们要读取文件中每行的内容,每行是一个一维数据。具体操作如下:

c = []f = open('score.csv', 'r')for i in f.readlines():    c.append(i.strip().split(','))f.close()print(c)

同样也可以使用with语句书写:

c = []with open('score.csv', 'r') as f:    for i in f.readlines():        c.append(i.strip().split(','))print(c)
四、csv库的使用

刚刚我们使用内置的函数和方法进行了csv文件的保存和读取操作。在Python中还提供了一个csv的标准库,我们可以直接导入csv库进行csv文件的操作。csv库里面主要提供了writer()和reader()两个对象。使用csv库可以大大降低读写csv文件程序的复杂度。我们目前需要掌握以下两个函数:

csv.writer() 创建初始化一个csv写入对象

csv.reader() 创建一个csv文件的阅读器对象

我们来看看使用csv库如何处理csv文件的保存和读取。

4.1 使用csv库存储csv文件

单行写入:一位数据的写入,使用writer.writerow()方法即可:

import csvc = ['苹果', '西瓜', '橘子', '柠檬']with open('fruit.csv', 'w', newline='') as f:    writer = csv.writer(f)    writer.writerow(c)

注意:使用csv库写入数据时,open()函数里面需要加一个参数newline=''。否则会多处空行。

多行写入:二维数据的写入,使用writer.writerows()方法即可:

import csvc = [        ['乔峰', '95', '98', '78', '65'],        ['虚竹', '85', '89', '68', '93'],        ['段誉', '99', '89', '86', '90']    ]with open('score.csv', 'w', newline='') as f:    writer = scv.writer(f)    writer.writerows(c)
4.2 使用csv库读取csv文件

使用csv库读取csv文件非常简单,直接将reader()对象转换为列表即可:

import csvwith open('score.csv', 'r') as f:    c = list(csv.reader(f))print(c)

csv库除了可以处理列表类型的数据外,还可以处理字典类型的数据。目前阶段暂时不要求大家掌握,这里不再做讲解。

五、csv文件操作实例

前面讲了Python中csv文件操作的方法,我们使用一个实际案例看一下它的作用。

由于有灾区发生地震,学校动员大家捐款。老师使用donate.csv文件记录了全班同学的捐款金额。请使用Python编写一个程序,统计全班的捐款总金额和平均金额。csv文件的内容如下表所示:

学号

捐款金额

1

5.00

2

2.00

3

3.00

4

6.00

5

10.00

6

1.00

7

2.00

8

8.00

9

5.00

10

5.00

11

6.00

12

10.00

13

1.00

14

2.00

15

5.00

16

8.00

17

9.00

18

9.00

19

10.00

20

2.00

文件的第一行为表头,我们在计算的时候不需要使用,读取csv文件获取内容后,可以对列表进行切片。由于从文件中获取到的所有数据类型都是字符串,进行运算时我们要进行类型转换。详细代码如下:

import csvwith open('donate.csv', 'r') as f:    donate = list(csv.reader(f))amount = 0for row in donate[1:]:    amount += float(row[1]) # 每一行第2个元素为金额avg = mount / len(donate[1:])print("总金额:", amount)print("平均金额:", avg)
六、课后思考题

编程题:

老师将全班的考试成绩保存在“score.csv”文件中。班级准备评选三好学生,只有语文成绩85分以上并且数学和英语成绩都在90分以上的同学才有资格作为三好学生的候选人。请编写一个程序,统计出有资格参加三好学生评选的同学的学号,并保存到“candidate.csv”文件中。

score.csv的内容如下所示:

学号

语文

数学

英语

1

84

90

89

2

91

89

92

3

89

98

99

4

81

97.5

98.5

5

79

81

89.5

6

88.5

91.5

100

7

79

99

92

8

95

96

97.5

9

87.5

89

97

10

79

78

75.5

11

92.5

99.5

96.5

12

91

91.5

89

13

92

89.5

99

14

84.5

92

94.5

15

85.5

92.5

98

16

92

87.5

90

17

90

90.5

89

18

92

95

98

19

56

49

61

20

88

87.5

91

七、上节课思考题答案

参考代码:

f = open('poem.txt', 'r')poem = f.read()f.close()# 第1题print(poem)# 第2题title = '''Say goodbye to Cambridge AgainXu Zhimo'''poem = title + poemf = open('poem.txt', 'w')f.write(poem)f.close()

注意:参考代码中将Python程序文件和poem.txt放在同一目录下。如果使用其他目录需自行修改。

标签: #怎么保存csv格式