说在前面
Python文件读写操作在浙教版教材中是以拓展链接的方式介绍的,按理说不是考试重点;但是文件操作是编程的重要内容,相关代码在教材中多次出现;2022年学考真题卷第12题就重点考查了文本文件的读写操作;第四章“数据处理与应用”,更是要求掌握CSV和Excel文件的读写操作。
所以,在教学中,专门安排一节课学习Python文本文件的读写操作,是非常有必要的。
Python文件操作的内容比较复杂,教学中无需面面俱到,只需介绍重点知识即可。
教学重点为:文件打开模式,读、写文件基本方法,包括open(),close(),readline()和write()。其他文件对象常用方法可提供相关资料,鼓励学有余力的同学课后研究。
教学过程设计:
新课引入:回顾在IDLE界面输入、输出的方法。
任务1. 逐行输入四句古诗:床前明月光,疑是地上霜。举头望明月,低头思故乡。并逐行输出。程序运行效果如下:
请编程实现上述功能。
参考代码:
【示例程序1】
for i in range(4):
a = input("请输入诗句:")
print(a)
新课教学活动1:文本文件写操作
任务2. 为了长期保存数据,必须将数据存储到文件中。下列程序的功能是逐行输入四句古诗,并存储到文本文件”古诗.txt”中。请阅读代码尝试理解每条语句的含义,并运行程序,观察程序执行效果。
【示例程序2】
fp = open("古诗.txt", "w")
for i in range(4):
a = input("请输入诗句:")
fp.write(a)
fp.close()
运行结果如下:
知识小贴士:
1. Python文件类型
为了长期保存数据以便重复使用、修改和共享,必须将数据以文件的形式存储到外部存储介质或云盘中。按文件中数据的组织形式可以把文件分为文本文件和二进制文件两大类。
文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符’\n’结尾。常规字符串是指记事本或其他文本编辑器能正常显示、编辑并且人类能够直接阅读和理解的字符串,如英文字母、汉字和数字字符串。
二进制文件把对象内容以字节串(bytes)进行存储,无法用记事本或其他普通文本处理软件直接进行编辑,通常也无法被人类直接阅读和理解,需要使用专门的软件进行解码后读取、显示、修改或执行。常见的如图形图像文件、音频视频文件、可执行文件、资源文件、各种数据库文件等都属于二进制文件。
2. Python文件操作
无论是文本文件还是二进制文件,其操作流程基本都是一致的,即首先打开文件并创建文件对象,然后通过该文件对象对文件内容进行读取、写入、删除、修改等操作,最后关闭并保存文件内容。
Python内置了文件对象,通过open()函数即可以指定模式打开指定文件并创建文件对象,语法为:
open(file,mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
其中file指定了被打开的文件名称;mode指定了文件打开模式,例如“只读”、“读写”、“追加”等;其他参数一般采用默认值,也可以根据需要进行设置。
说明:教师可提供上述参考资料,但只需重点介绍程序中涉及的open(),close()和write()方法。
认知冲突:示例程序1和示例程序2的代码结构相似,但输出结果不一样,即print(a)是逐行输出诗句,但fp.write(a)把所有的诗句都写到同一行了。
任务3. 请问如何修改示例程序2,实现每行只写一句诗功能?
提示:字符串需要以换行符’\n’结尾,写入到文本文件中,才能实现换行功能。
参考代码:
【示例程序3】
fp = open("古诗.txt", "w")
for i in range(4):
a = input("请输入诗句:")
fp.write(a + "\n")
fp.close()
新课教学活动2:文本文件读操作
任务4. 已知文本文件”古诗.txt”中存储了一首古诗,编写程序读取文件内容,并逐行输出到IDLE中。请仔细阅读代码,并将缺失的代码补充完整。
【示例程序4】
fp = open("古诗.txt", 第1空)
line = fp.readline() # 思考readline()的功能是什么
while line:
print(line.strip()) # 若改成print(line)会怎样?
line = 第2空
第3空
补充说明:Python提供了更简明的逐行读取文件的方法,即直接使用for循环逐行遍历文本文件。参考代码如下:
【示例程序5】
fp = open("古诗.txt", "r")
for line in fp:
print(line.strip())
fp.close()
新课教学活动3:文本文件读写操作综合训练
任务5.文本文件“关山月.txt”中存储了李白的诗作《关山月》,内容如下:明月出天山,苍茫云海间。长风几万里,吹度玉门关。汉下白登道,胡窥青海湾。由来征战地,不见有人还。戍客望边邑,思归多苦颜。高楼当此夜,叹息未应闲。明月出天山,苍茫云海间。
这是一段由标题分隔的文本,请编写程序,以“。”为分隔符,将这段文本转换成诗词风格,每句占一行,逐行输出(注意加上句号),并覆盖原文件内容。
下面的程序能实现上述功能,请仔细阅读代码,将缺失的代码补充完整。
【示例程序6】
fp = open('关山月.txt', 'r')
text = ""
line = fp.readline()
while line:
text = text + line.strip()
line = ①
fp.close()
fp = open('关山月.txt', ② )
lines = text.split('。')
for line in lines:
if line: # 思考如果不写if语句会出现什么情况?
fp.write(③ )
fp.close()
补充说明:示例程序6分两次打开文件,分别执行读文件和写文件操作,这样效率不高。事实上Python提供了读写模式,可以在打开文件后,进行读或写操作。参考代码如下:
【示例程序7】
fp = open('关山月.txt', 'r+')
text = fp.read() # 一次性读入文件到字符串text中
fp.seek(0) # 将读取指针移动到文件开头
lines = text.split('。')
for line in lines:
line = line.strip() # 去除多余空行
if line: # 思考如果不写if语句会出现什么情况?
fp.write(line + '。\n')
fp.close()
知识小贴士:
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。为了防止程序员忘记关闭文件, Python引入了with语句来自动帮我们调用close()方法:
with open(file,mode) as f:
dosomething
关键词 with 语句可以保证文件对象在使用完之后一定会正确地关闭文件。
示例程序7也可以写成如下形式:
【示例程序8】
with open('关山月.txt', 'r+') as fp:
text = fp.read()
fp.seek(0) # 将读取指针移动到文件开头
lines = text.split('。')
for line in lines:
line = line.strip() # 去除多余空行
if line:
fp.write(line + '。\n')
总结:
虽然文件操作是Python语言教学的重点内容,它在编程实践中应用非常广泛,但具体到课堂教学和应试的角度,由于课时不够和考试要求不高等原因,我们在课堂教学中不需要对Python文件操作做过多拓展,只需要求学生掌握文件的打开模式和读写文件的基本方法即可。
根据温故知新和循序渐进原则,我们先让学生比较在IDLE界面输入、输出和读写文件的区别,理解input()、print()、read()和write()等函数的作用;再通过具体实例,掌握写文件和读文件的基本方法;最后通过文本文件读写操作综合训练帮助学生对所学知识融会贯通。
由于各种原因,在实现打开文件功能时,教材提供的代码没有使用更为常用——也是Python社区强烈推荐的——with语句。由此导致绝大多数的教辅资料习题或联考试卷中也没有出现with语句;有个别题目中用到了with语句,也被一些老师吐槽超纲。关于这个问题,你是怎么看的呢?
需要本文word文档、源代码和课后思考答案的,可以加入“Python算法之旅”知识星球参与讨论和下载文件,“Python算法之旅”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。
我们专注Python算法,感兴趣就一起来!
相关优秀文章:
文章评论