小学Python系列少儿编程课程《第8章 永久存储的文件》课件_第1页
小学Python系列少儿编程课程《第8章 永久存储的文件》课件_第2页
小学Python系列少儿编程课程《第8章 永久存储的文件》课件_第3页
小学Python系列少儿编程课程《第8章 永久存储的文件》课件_第4页
小学Python系列少儿编程课程《第8章 永久存储的文件》课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python少儿编程第八章永久存储的文件目录1.1打开和关闭文件1.2读写文件1.3定位文件1.4高大上的文件系统PART01打开和关闭文件打开文件1.1Python使用内置函数open()即可按照指定模式打开指定文件,并创建文件对象,其语法格式如下。open(filename[,mode])其中,filename表示文件名称;mode表示文件的读写模式,缺省时为只读模式。该函数返回一个文件对象。例如,以只读模式打开一个名为“1.txt”的文件,可以用下面代码实现。file=open('1.txt')其中,file为打开的文件对象,通过它可以对文件进行读写操作。如果想要写入文件,就需要在打开文件时指明文件的打开模式。Python中文件的打开模式有多种,具体表示方式如表8-1所示。打开文件1.1表8-1文件打开模式打开文件1.1(1)以只读模式“r”打开文件时,该文件必须已经存在,否则抛出异常,且只能进行读取操作,打开时文件位置指针在文件的开头。(2)以只写模式“w”打开文件时,如文件不存在,则以指定的文件名新建文件。若打开的文件已经存在,则新数据覆盖原文件中的已有数据,且只能进行写操作。(3)以追加模式“a”打开文件时,如果文件已存在,打开时文件位置指针在文件的末尾,也就是说,新数据将写入到已有数据之后,如果文件不存在,则新建文件进行写入。(4)“r+”“w+”“a+”模式都是既可读也可写,只是“r+”与“r”一样,文件必须已经存在。(5)打开模式带上“b”表示以二进制文件格式进行操作。关闭文件1.2在Python中,虽然文件会在程序退出后自动关闭,但考虑到数据的安全性,每次使用完文件后,都应使用close()方法关闭文件,其语法格式如下。file.close()其中,file为文件对象。例如,以只写模式打开一个名为“test.txt”的文件,然后关闭文件,可以用下面代码实现。file=open('test.txt','w') #以只写方式打开名为“test.txt”的文件file.close() #关闭文件with语句1.3Python中的with语句(上下文管理语句)用于对资源进行访问,保证不管处理过程中是否发生错误或异常,都会调用__exit__()方法,执行规定的清理操作,释放访问的资源。它常用于文件操作、数据库连接、网络通信连接、多线程与多进程同步时的锁对象管理等场合,其语法格式如下。withcontext_expression[astarget(s)]:with_body #执行代码其中,context_expression是一个需要执行的表达式,返回一个对象;target(s)用于保存context_expression返回的对象,可以是一个或多个。例如,读写文件时,with语句的用法如下。withopen(filename[,mode])asfile:with_body #通过文件对象读写文件的语句PART02读写文件写入文件2.1write()方法用于向文件中写入指定字符串,其语法格式如下。file.write(str)其中,file表示文件对象,str表示要写入文件的字符串。【例8-1】

生日备忘录。【问题分析】首先,以只写模式打开文件(当文件不存在时会创建文件);然后,向文件中写入数据,这里需要注意的是write()方法不会自动在字符串的末尾添加换行符,因此,当输入多行时,需要在write()语句中包含换行符;最后,关闭文件。1.write()方法写入文件2.1【参考代码】#以只写模式打开名为“birthday.txt”的文件file=open('birthday.txt','w')#向文件中写入字符串file.write('小蓝2011.01.01\n')file.write('小舞2010.08.15\n')file.write('小明2011.05.01\n')file.write('小红2010.12.24\n')file.close() #关闭文件1.write()方法写入文件2.1【运行结果】

程序运行后,会在当前工作目录下生成一个名为“birthday.txt”的文件,打开该文件,可以看到数据成功写入到了文件中,如图8-1所示。图8-1“birthday.txt”文件的内容1.write()方法写入文件2.1writelines()方法用于向文件中写入字符串序列,如一个字符串列表,其语法格式如下。file.writelines(sequence)其中,file表示文件对象,sequence表示写入文件的字符串序列。【例8-2】

向生日备忘录中追加生日信息。【问题分析】

要向文件中追加数据,须使用追加模式“a”打开文件。使用writelines()方法写入数据时,同样不会自动在列表后添加换行符,须手动加入。这里使用with语句进行文件操作。2.writelines()方法写入文件2.12.writelines()方法【参考代码】#定义列表并赋值birthday=['小果2010.10.01\n','小玉2010.09.09']#以追加模式打开“birthday.txt”的文件withopen('birthday.txt','a')asfile:file.writelines(birthday) #向文件中追加字符串列表写入文件2.12.writelines()方法【运行结果】

程序运行后,会将数据追加到“birthday.txt”文件中,打开该文件,可以看到数据成功追加到了文件中,如图8-2所示。图8-2追加数据后“birthday.txt”文件的内容读取文件2.2read()方法用于从文件中读取指定的字节数,其语法格式如下。file.read([size])其中,file表示文件对象;size表示从文件中读取的字节数,如果缺省或为负,则读取整个文件内容。该方法以字符串形式返回从文件中读取的内容。1.read()方法读取文件2.2【例8-3】

按字节读取生日备忘录。1.read()方法【参考代码】#以只读模式打开“birthday.txt”文件withopen('birthday.txt','r')asfile:line=file.read(14) #读取前14个字节print(line) #输出前14个字节print('*'*20) #输出20个*用于分隔content=file.read() #读取文件中剩余的所有内容print(content) #输出文件中剩余的所有内容读取文件2.2【运行结果】

程序运行结果如图8-3所示。1.read()方法图8-3例8-3程序运行结果【程序说明】

打开文件时,文件位置指针在文件的开头,运行“line=file.read(14)”语句,就会从文件的开头读取14个字节,由于第14个字节是一个换行符,而print()函数也会默认换行,所以输出“小蓝2011.01.01”和一个空行。当执行“content=file.read()”语句时,文件位置指针已经在第14个字节处,因此,读取了文件中剩余的所有内容(不包括前14个字节)。读取文件2.2readline()方法用于从文件中读取一行,包括换行符,其语法格式如下。file.readline([size])其中,file表示文件对象,size表示从文件中读取的字节数,如果缺省,则读取整行。2.readline()方法读取文件2.22.readline()方法【例8-4】

按行读取生日备忘录。【参考代码】#以只读模式打开“birthday.txt”文件withopen('birthday.txt','r')asfile:whileTrue:line=file.readline() #读取一行ifline: #如果读取的内容不为空print(line,end='') #输出一行else: #如果读取的内容为空break #退出循环读取文件2.22.readline()方法【运行结果】

程序运行结果如图8-4所示。图8-4例8-4程序运行结果【程序说明】上述代码中,循环按行读取文件中的内容,如果读取的内容为空,则说明文件位置指针已经在文件的末尾了,此时退出循环。读取文件2.2readlines()方法用于读取所有行(直到结束符EOF)并返回列表,列表中每个元素为文件中的一行数据,其语法格式如下。file.readlines()3.readlines()方法读取文件2.23.readlines()方法【例8-5】

一次性读取生日备忘录。【参考代码】#以只读模式打开“birthday.txt”文件withopen('birthday.txt','r')asfile:content=file.readlines() #读取所有行并返回列表print(content) #输出列表forlineincontent: #遍历列表print(line,end='') #输出列表中的每个元素读取文件2.23.readlines()方法【运行结果】

程序运行结果如图8-5所示。图8-5例8-5程序运行结果读取文件2.23.readlines()方法当读取的文件非常大时,一次性将内容读取到列表中会占用很大内存,影响程序执行速度。因此,可以将文件本身作为一个行序列进行读取,遍历文件的所有行可直接用下面代码实现。#以只读模式打开“birthday.txt”文件withopen('birthday.txt','r')asfile:forlineinfile: #遍历文件的所有行print(line,end='') #输出每行读取文件2.23.readlines()方法【例8-6】

统计2021年《政府工作报告》全文中出现次数前15的词语。【问题分析】

词语出现次数统计涉及对词汇的统计(即词频统计),从思路上看,词频统计只是累加问题,即对文档中每个词语设计一个计数器,每出现一次,相关计数器加1。可以采用字典来解决词频统计问题,以“词语”为键,“计数器”为值。中文字符之间没有天然的分隔符,在进行词频统计之前,需要对中文文本进行分词,此时,可使用jieba库解决这个问题。【参考代码】importjieba #导入jieba库#以只读模式打开文件并读取文件内容withopen('2021年《政府工作报告》全文.txt','r')asfile:content=file.read()读取文件2.23.readlines()方法【参考代码】(续)words=jieba.lcut(content) #进行分词,将结果放入words列表中counts={} #定义字典用于存储词语和计数器forwordinwords: #遍历wordsiflen(word)==1: #排除单个字符的分词结果continueelse:counts[word]=counts.get(word,0)+1 #计数器累加items=list(counts.items()) #将字典元素转换为列表items.sort(key=lambdax:x[1],reverse=True) #根据计数降序排序foriinrange(15): #输出前15项word,count=items[i]print('{0:<10}{1:>5}'.format(word,count))读取文件2.23.readlines()方法【运行结果】

程序运行结果如图8-8所示。图8-8例8-6程序运行结果PART03定位文件获取当前读写位置3.1在读写文件的过程中,如果想知道当前文件位置指针的位置,可通过tell()方法来获取,其语法格式如下。file.tell()该方法返回文件的当前位置,即文件位置指针当前位置,它是从文件头开始的字节数。定位到指定位置3.2如果在读写文件的过程中,需要从指定位置开始读写操作,就可以使用seek()方法移动文件位置指针到指定位置,其语法格式如下。file.seek(offset[,from])其中,file表示文件对象;offset表示偏移量,即偏移的字节数;from表示起始点,即偏移的参考点。from有3种取值:0代表“文件开始位置”,1代表“当前位置”,2代表“文件末尾位置”。缺省时取0,当取2时,offset为负值,表示文件位置指针从文件末尾向前移动。定位到指定位置3.2【例8-7】

读取文件,统计并输出文件内容。【参考代码】filename=input('请输入文件名:') #输入文件名#以只读模式打开文件,并设置编码方式为UTF-8withopen(filename,'r',encoding='UTF-8')asfile:file.seek(0,2) #指针移到文件末尾pos=file.tell() #获取指针位置并赋给posfile.seek(0,0) #指针移到文件开头content=file.read(pos) #读取pos个字节的内容#输出字节数和内容print('共{}个字节,内容如下。\n{}'.format(pos,content))【问题分析】

首先,打开指定的文件,文件名由键盘输入;接着,使用seek()方法定位到文件末尾;然后,使用tell()方法返回文件位置指针当前位置,即文件包含的字节数;最后,使用seek()方法定位到文件开头后,使用read()方法读取文件内容,并输出字节数和文件内容。定位到指定位置3.2【运行结果】

程序运行结果如图8-9所示。图8-9例8-7程序运行结果PART04高大上的文件系统os模块4.1Python标准库的os模块除了提供使用操作系统功能和访问文件系统的简便方法外,还提供了大量文件操作的方法,常用的方法如表8-2所示。表8-2os模块的常用方法os模块4.1表8-2os模块的常用方法(续)os模块4.1【例8-8】

创建文件夹,批量处理文件。【问题分析】

首先,使用mkdir()方法在当前工作目录下创建“语文”文件夹,并使用chdir()方法将工作目录切换到“语文”文件夹中;接着,在该目录下使用for循环以只写模式打开文件方式批量生成文件;然后,删除其中一个文件后,生成一个同名文件夹;最后,使用listdir()方法返回“语文”文件夹下的文件列表,并使用for循环遍历文件列表,使用rename()方法重命名每个文件。其中,每次操作“语文”文件夹时,可通过输出该文件夹下文件列表查看是否操作成功。os模块4.1【参考代码】importos #导入os模块os.mkdir('语文') #创建“语文”文件夹os.chdir('语文') #将当前目录切换到“语文”文件夹中#创建文件名列表data_list=['语法','诗词','古文','写作','外国文学']fordataindata_list: #遍历文件名列表filename=data+'.txt' #设置文件为txt文件file=open(filename,'w') #创建文件file.close() #关闭文件path=os.getcwd() #获取当前目录print(os.listdir(path)) #输出文件列表os模块4.1【参考代码】(续)os.remove(path+'\\外国文学.txt') #删除“外国文学”文件os.mkdir('外国文学') #创建“外国文学”文件夹file_name=os.listdir(path) #获取当前目录下的文件和文件夹列表print(file_name) #输出文件和文件夹列表i=1fornameinfile_name: #遍历列表if'.txt'inname: #如果为txt文件new_name=str(i)+name #在原文件名前加上数字进行编号os.rename(name,new_name) #重命名文件i+=1 #i加1print(os.listdir(path)) #输出文件和文件夹列表os模块4.1【运行结果】

运行程序,“语文”文件夹下文件列表的变化如图8-10所示。重命名后的文件视图如图8-11所示。图8-10“语文”文件夹下文件列表的变化os模块4.1图8-11重命名后的文件视图os.pat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论