从Scratch到Python 14 文件读写

上节课讲到字典,我们用循环遍历字典并输出了成绩,在屏幕上显示出来。假如你是学习委员,现在老师让你把程序的计算结果发给他,你会怎么处理?

你当然不能把程序发给老师,老师不一定安装Python的开发环境;如果用QQ或微信,也不是长久保存信息的方法。这种情况下,我们就需要用文件的方式来保存和传递数据了。

其实,我们在使用计算机的时候,就在不断地和各种各样的“文件”打交道,以前学习Scratch的时候,我们会把程序保存成一个.sb3文件;现在我们学习Python,会把写好的程序保存成.py文件,不同的文件后缀称为它们的“扩展名”,一般来说,我们只要看到常见的扩展名,就知道这个文件存储的数据类型。

 

操作系统中的文件.png

 

文件本质上是数据的序列,可以包含任何数据内容。文件根据保存的数据类型可以分为文本文件和二进制文件,文本文件可以看作储存在计算机中的长字符串;而二进制文件是非字符的、特定格式的文件,比如我们png格式的图片、mp3格式的音频、mp4格式的视频文件等等。

在当前阶段,我们先学会怎么操作文本文件就可以了,这样至少能把我们平时做程序的输出保存下来。

一、文件打开与关闭

Python对文件的操作可以分为三个步骤:打开——操作——关闭。常见的操作方式有读取文件数据,创建空白文件并写入数据、在现有文件后面追加数据等。

使用Python提供的open()函数可以打开文件 ,它接收两个参数:文件名和打开模式。文件操作完成之后可以使用close()函数关闭它。

变量名 = open('<文件名>','打开模式')
变量名.close()

第一个参数“文件名”是一个字符串,如果要打开的文件和你的程序在一个目录,你可以只提供文件名,不提供路径;否则就需要提供完整的路径。在哪里找路径呢?如果你使用windows操作系统,可以右键点击文件,在弹出的菜单中点击“属性”,就可以在弹出的对话框中找到文件路径了。需要注意的是,Windows的文件路径分隔符是“\”,它也是Python的字符串转义符,所以我们一般会用斜杠“/”来代替“\”。比如“C:\test.txt”可以写成“C:/test.txt”。当然,你也可以写成“C:\test.txt”。

第二个参数“打开模式”也是字符串,有以下几种取值:

打开模式 含义
r 只读模式(默认值),若文件不存在会报错
w 覆盖写模式,若文件不存在会创建新文件,若文件存在会覆盖原来的文件内容
x 创建写模式,若文件不存在则创建新文件,若文件存在会报错
a 追加写模式,若文件不存在则创建新文件,若文件存在则在最后追加内容
+ 与前面的 r/w/x/a 一同使用,在原功能基础上增加同时读写功能

第二个参数如果省略,代表是只读,即默认打开方式 “r”。

二、读取文件

打开文件后,Python提供三种读取文件的方法:

  • f.read():以字符串形式返回读取的数据,若传递一个参数代表读取字符数,不传递代表读取整个文件;
  • f.readline():读取文件一行内容,以字符串形式返回。若传递一个参数,则表示读取该行的字符数;
  • f.readlines():读取文件中的所有行,以列表形式返回数据。列表中每个元素就是文件中的一行;若传递一个参数,代表读取的行数。
f = open('test.txt')  # 以只读模式打开程序目录下的test.txt文件
# 第一种方式读取
content = f.read()
print(content)
# 让文件指针回到开头重新读
f.seek(0)
# 第二种读取方式
list1 = f.readlines()
for i in list1:
    print(i)
f.close()

如果文件很大,一次性读取文件所有内容速度会很慢,这时可以把文件作为一个序列对待,用for循环遍历,如:

f = open('test.txt')  # 以只读模式打开程序目录下的test.txt文件
for i in f:
    print(i)
f.close()

三、写入文件

Python提供了两种写入文件的方法:

  • f.write():接收一个字符串参数,将该字符串写入文件
  • f.writelines():接收一个字符串列表为参数,将序列中元素写入文件

如:

f = open('poem.txt', 'w')  # 以覆盖写模式打开文件 
f.write('白日依山尽,\n黄河入海流。\n欲穷千里目,\n更上一层楼')  # 写入四行诗句
f.close()

四、成绩写入示例

上一节课的作业,我们要求处理五位同学的成绩并输出。现在我们完成这个作品,并把结果写入到文件中:

score = {
    '欢欢':[99,98,97],
    '乐乐':[100,98,87],
    '天天':[97,88,94],
    '格格':[85,93,92],
    '图图':[100,99,98],
}
list1 = []
list1.append('姓名\t语文\t数学\t英语\t总分\t平均分\n')
for i,j in score.items():
    list1.append(i + '\t' + str(j[0]) + '\t' + str(j[1]) + '\t' + str(j[2]) + '\t' + str(sum(j)) + '\t' + str(sum(j)/3) + '\n')

f = open('score.txt','w')
f.writelines(list1)
f.close()

五、课后作业

第8课课后作业是判断法定结婚年龄,如下:

在列表1、列表2中分别存储着五个人的姓名和他们的身份证号:

  • 列表1:[‘张三’,’李四’,’王五’,’赵六’,’孙七’]
  • 列表2:[‘410305200801057425’, ‘410311198009065550’, ‘410301197611238426’, ‘410302199811257326’, ‘41030820212234’]

请编写程序,根据每个人的身份证号,循环判断每个人是否到达法定结婚年龄。

注:

  • 法定结婚年龄的判断标准是:男性22岁,女性20岁。
  • 身份证号码中的第17位数字是如果是奇数性别为男,偶数则为女。 – 身份证号中第7-14位代表出生年月日,可以用于计算年龄。

程序要按以下格式输出:

张三:XX岁,性别X,达到/未达到法定结婚年龄

李四:XX岁,性别X,达到/未达到法定结婚年龄

……

请改造这个程序,把输出结果保存到文本文件中。

给TA赞助
共{{data.count}}人
人已赞助
综合资讯

神奇哈哈镜-第14届蓝桥杯省赛Scratch初级组真题第3题

2023-6-5 10:40:33

综合资讯

从Scratch到Python 15 石头剪刀布

2023-6-5 10:49:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索