版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章小试牛刀—文件常州工业职业技术学院119五月2026Python程序设计丁辉袁凯烽商俊燕韩少勇范晓玲郝亚平王霞俊吴春晖目录
Contents01文件的打开与创建02文本文件操作精选案例03二进制文件操作精选案例040507文件系统操作简介小结2文件创建与打开01文件概述
按文件中数据的存储形式可以把文件分为文本文件和二进制文件两大类型。
①文本文件。文本文件是一种顺序结构文件,文件中存储的是每个字符的编码,因此任何字处理软件都可以直接打开,在每一段落后加换行符“\n”,文件结束处有一结束标志EOF。Windows系统中,扩展名为txt、log、ini等的文件都是文本文件。
②二进制文件。二进制文件简单地说就是除文本文件外的文件。是把文件内容以字节串的形式进行存储,需要使用对应的文件打开工具打开后进行读取、显示、修改等。如图形图像文件、音频文件、视频文件、可执行文件等。45open()是Python内建函数,其功能是打开文件或创建文件。open()函数格式open(filename[,mode='r',buffering=-1,encoding=None,errors=None,newline=None])
如:f=open(“d:\\tmp\\test.txt","r")参数说明filename:指定要打开的文件名及路径,如“d:\\tmp\\test.txt"
mode:指定文件的打开方式,省略,默认mode=‘r’。文件打开模式见下表。模式功
能r以只读方式打开文本文件,默认模式,可省略w以写方式打开或创建文本文件,如果文件已经存在,则清空;如果不存在,则新建x以写方式创建一个新的文本文件a打开或创建一个文本文件,并可在其尾部追加信息b二进制文件t文本文件+以读写模式打开文件“b”、”+”、”t”可与”r”、”w”、”x”、”a”组合,如”rb+”表示打开一个二进制文件,用于读写,文件指针指向文件的开头。1.open()函数6参数说明(续)buffering:指定文件读写缓冲模式。如果buffering的值被设为0,就不会有缓存。如果buffering的值设为1,访问文件时会缓存。如果将buffering的值设为大于1的整数,表示是缓冲区大小。如果取负值,缓存大小则为系统默认,即为buffering=-1。encoding:指定文本文件的编码和解码方式,Python支持的编码格式请查看codecs模块。通常使用的是utf-8或者是gbk编码。默认encoding=None,表示不做设置,使用系统默认的,Python3默认的编码是utf-8。errors:读取文件出现错误时的处理方式。默认为errors=None,表示不做设置。newline:用来控制文本模式之下一行的结束字符。可以是None,’’,\n,\r,\r\n等。当在读取模式下,如果新行符为None,那么就作为通用换行符模式工作,意思就是说当遇到\n,\r或\r\n都可以作为换行标识,并且统一转换为\n作为文本输入的换行符。当设置为空’’时,也是通用换行符模式工作,但不作转换为\n,输入什么样的,就保持原样全输入。当设置为其它相应字符时,就会判断到相应的字符作为换行符,并保持原样输入到文本。当在输出模式时,如果新行符为None,那么所有输出文本都是采用\n作为换行符。如果设置为’’或者\n时,不作任何的替换动作。如果是其它字符,会在字符后面添加\n作为换行符。1.open()函数7open()函数的返回值如果正常执行,open()会返回一个可迭代的文件对象,通过返回的迭代对象可以对文件进行访问。如果文件不存在、访问权限不够等原因,则抛出异常。应用示例#以只读方式打开e:\tmp\douban.txt文件f=open(”e:\\tmp\\douban.txt","r")#新建或重建二进制文件e:\tmp\train.dat,并且是读写方式fp=open(“e:\\tmp\\train.dat”,“wb+")1.open()函数8常用属性>>>‘e:\tmp\train.dat'>>>‘e:\tmp\douban.txt'>>>f.closedFalse>>>f.mode'r'>>>fp.mode‘wb+'属
性意
义closed返回文件是否已经关闭,返回True表示已经关闭,返回False表示未关闭mode返回文件的打开模式name返回文件名2.文件对象的属性和方法9方
法功
能read([size])从文件中读取size个字符,当size缺省时,默认读取全部字符readline()从文本文件中读取一行内容,以\n为行结束标志readlines()把文本文件中每行文本作为一个字符串存入到一个列表中,返回该列表close()把缓冲区的内容写入文件,并关闭文件,释放文件对象write(s)把字符串s写入文件writelines(s)把字符串列表s写入文件,不添加换行符seek(offset[,whence])把文件指针相对于whence位置移动offset字节数。whence为0时,表示是文件头位置,1表示当前位置,2表示文件尾位置,默认为0。tell返回文件指针的当前位置常用方法2.文件对象的属性和方法10应用示例#向train.dat里写入字符串“ding”,注意二进制文件要转换成字节串写入>>>fp.write(“ding”.encode(“utf8”))#用utf8格式编码4#返回4,表示写入4字节>>>fp.seek(0)#移动文件指针到开头0>>>fp.read().decode(“utf8”)#读出字节串并用utf8格式转换成字符串输出'ding'>>>f.readline()#按行读取test.txt文件的内容'ding:123456\n'>>>f.readline()'wang:444444\n'>>>f.readline()'xu:12341234\n'>>>f.readline()#test.txt文件只有三行,再读取就显示空''>>>f.close()#文件打开用完后要及时关闭>>>fp.close()2.文件对象的属性和方法文本文件操作精选案例0212
【例4-1】请编程帮英语老师把一次考试的成绩存入一个文本文件中。①根据IPO模式分析如下I(输入数据):全班一次考试的英语成绩和姓名。O(输出结果):文本文件,内容是学生姓名和成绩。P(处理过程(算法)):见②。②算法设计(控制流图)这个算法可以有两种思路,一种是每输入一个姓名和成绩,直接写入文件;另外就是所有输入完成后,再写入文件。本例采用第二种,全部输入完成后再写入文件,同样以两个”-1”作为输入结束标志。第一种,请读者自己完成。TrueFalse开始初始化一个空列表e[]输入姓名name输入成绩scorename=-1?将姓名和成绩存入列表将列表存入文件结束文本文件操作精选案例13③编写程序#eg4_1.py#输入成绩和姓名并保存成文件#初始化准备m=[]#输入成绩和姓名whileTrue:name=input('请输入姓名:')score=input('请输入成绩:')ifname=='-1':breakelse:m.append(name)m.append(score)文本文件操作精选案例#保存到文件#新建一个文件english.txtf=open(“e:\\tmp\\english.txt‘,‘w’)foriinrange(len(m)//2):f.write(m[2*i]+'')#用空格进行分隔姓名和成绩f.write(m[2*i+1]+'\n')#每个人姓名和成绩存为一行f.close()#关闭文件14④调试程序此程序的调试,需要依次输入姓名和成绩,输入结束后,通过查看e:\tmp目录下文件english.txt的内容,确认程序实现了题目要求的功能。调试结果见下图。文本文件操作精选案例如果考试课程是2门甚至是多门,应如何修改程序?15【例4-2】请编程对例4-1生成的文件进行读取,并计算平均成绩。#eg4_2.py#从文件读取成绩并计算平均值#初始化s=[]#存放读入的成绩#打开文件,读取数据f=open(‘e:\\tmp\\english.txt')forlineinf:n,g=line.split('')#分割字符串,注意空格是2个g=g.strip()#去除尾部的'\n's.append(float(g))#添加到列表中f.close()#求平均值sum=sum(s)average=sum/len(s)#输出结果print("平均成绩为:%.2f"%average)文本文件操作精选案例从“forlineinf:”语句可以看到Python语言的智能化和强大的功能。此语句的功能是按行遍历文件。文件用完要及时关闭,以防文件被损坏。为了防止忘记关闭文件,Python提供了一种文件安全的使用方法:withopen(e:\\tmp\\english.txt')asf:请用字处理工具对english.txt文件进行修改,增加多条数据,再次运行程序,观察结果。16【例4-3】已知文件sample.txt中的内容为“越过长城,走向世界!”,文件内容如图所示。请编程获取偶数位的字符,即获得“我牛,就道”。
分析:read()函数是读取指定个数的字符,seek()函数是移动文件指针,本例利用这两个函数来完成。文本文件操作精选案例17#eg4_3.py#间隔读取字符s=[]f=open(r’e:\data\sample.txt’)i=0whileTrue:k=f.read(1)#读取一个字符ifk:s.append(k)i=i+2#相对文件头移动到下一个偶数位置,每个字符占用2个字节
f.seek(i*2)else:breakforkins:print(k,end='')f.close()文本文件操作精选案例“r‘e:\data\sample.txt’”表示字符串本身,不含转义功能。Python3.X中,如果采用ASCII编码,则每个中文字符是2字节编码,如果是UTF-8编码,则每个中文字符是3字节。西文字符是1字节。18【例4-4】CSV文件的读取。CSV是一种用逗号分隔的文件格式,是一种通用的、相对简单的文件格式,在表格类型的数据中用途广泛,很多关系型数据库都支持CSV类型文件的导入和导出,并且EXCEL的表能和CSV文件进行转换。其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。可以用记事本、EXCEL等工具打开。下图是用记事本打开的一个CSV文件。文本文件操作精选案例19#eg4_4.py#CSV文件的读取#打开文件withopen(‘e:\\tmp\\jc2017.csv','r',encoding='utf8’)asf:#读取文件,并显示forlineinf:#按行进行遍历文件name,phone=line.split(‘,’)#“,”是分隔符name.strip()#去除头尾部空格phone.strip()print("%-14s"%name,end="")#输出信息print("%s"%phone)文本文件操作精选案例20文本文件操作精选案例【例4-附1】请编写一个新冠肺炎预防知识测试程序。每答对一题,显示一个鼓励的图片。新冠病毒危害全球,人人需要熟悉病毒防治方法。我国的疫情控制非常成功,得益于新时代中国特色社会主义制度的优越性。每位生活在幸福中国的同学应学会感恩!热爱祖国!热爱党!21文本文件操作精选案例22#eg4_fu_1.pyimportmatplotlib.pyplotaspltimportmatplotlib.imageasmpimg##importnumpyasnp##fromos.pathimportsys#打开题库x=open('xg.txt','r',encoding='utf-8')#开始标志,显示开头的说明i=-1tm=1#图片计数(同时又是图片文件名)#读题库forlineinx.readlines():ifi==-1:#开头的说明行文本文件操作精选案例【例4-附1】请编写一个新冠肺炎预防知识测试程序。每答对一题,显示一个鼓励的图片。print('\t***********************************************\n')print("\t%s"%(line))print('\t***********************************************\n’)i=i+1input("准备好,按任意键开始!!!")print('\n')continueifi==0:print("%s"%(line))i=i+1else:line=line.strip()#答案的处理,正确答案在最后一项
line=line.split('|')forjinrange(0,len(line)-1):#显示答案选项
print(line[j])i=0cnt=0#记录回答的次数
print()whileTrue:#循环等待输入答案并进行判别
ww=input("请输入答案:")23文本文件操作精选案例ifww.upper()!=line[len(line)-1].upper():print("错误")cnt=cnt+1ifcnt==3:print("!!!你已经答错了三次,请牢记防疫知识点!!!")print("正确答案%s"%(line[len(line)-1]))ww=input("请再输入一次答案:")print('\n')lena=mpimg.imread(str(tm)+'.png')#lena.shapeplt.imshow(lena)plt.axis('off')plt.show()tm=tm+1break24文本文件操作精选案例else:#答对,则输出一幅图片
lena=mpimg.imread(str(tm)+'.png')#lena.shapeplt.imshow(lena)plt.axis('off')plt.show()tm=tm+1break
print(('\n'*30))#伪清屏print('\t\t&&&&&&&&&&&&&&&&&\n')print("\t\t耶!你全答对了!!厉害!!!\n")print('\t\t&&&&&&&&&&&&&&&&&\n')print(('\n'*15))请反复调试,努力发现程序的bug!体会编程需要认真仔细的意义二进制文件操作精选案例0326二进制文件,不能用文字处理软件直接打开,Python的文件对象也不能直接读取和理解其内容。保存成二进制文件时,需要将保存的对象转换成二进制序列,读取时,也是要按序列化的规则将二进制序列反序列化还原成原来的对象。Python中常用的序列化模块有struct、pickle、shelve、marshal和json。pickle是Python内置的标准模块,也称之为内置标准库。pickle模块常用方法有以下4个。pickle.dump(obj,file[,protocol=None])将对象obj序列化后保存到文件file中去。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。pickle.load(file)从file中读取一个序列数据,并将其反序列化后解析为一个Python对象。pickle.dumps(obj[,protocol=None])将obj序列化。参数protocol同dump()。pickle.loads(bytes_object)将二进制对象反序列化还原为原来的对象1.使用pickle模块读写二进制文件27【例4-5】使用pickle模块将信息写入二进制文件。#eg4_5.py#导入pickle模块importpickle#准备存入的数据i=13000000a=99.389s='学习Python很高兴!'list=[[1,2,3],[4,5,6],[7,8,9]]tuple=(-5,10,8)dict={'a':'JAVA','b':'C#','g':'PHP','o':'Python'}data=[i,a,s,list,tuple,dict]#创建二进制文件,并写入信息withopen(r’e:\tmp\sample_pickle.dat','wb')asf:pickle.dump(len(data),f)#写入将要写入的数据个数foritemindata:#循环写入数据pickle.dump(item,f)1.使用pickle模块读写二进制文件写入成功后,用记事本打开文件可以看到是乱码28【例4-6】使用pickle模块将例4-5生成的二进制文件中的信息读取出来。#eg4_6.pyimportpicklewithopen(r’e:\tmp\sample_pickle.dat','rb')asf:n=pickle.load(f)#读出文件中的数据个数foriinrange(n):#依次读出数据,还原成原来的对象x=pickle.load(f)print(x)1.使用pickle模块读写二进制文件二进制文件的读取顺序要和写入顺序一致29JSON(JavaScript
ObjectNotation,JS对象标记)是一种轻量级的数据交换格式。它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。使人易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。在用Json进行编码和解码过程中,Python的内置数据类型与Json类型会相互转换,具体的对应关系如表1和表2所示。2.使用json模块读写二进制文件Python类型Json类型Dict{}list,tuple[]Strstringint/floatnumberTrue/Falsetrue/falseNonenullJson类型Python类型{}dict[]list,tuplestringstrnumberint/floattrue/falseTrue/FalsenullNone表1Python类型编码为Json类型表2json类型解码为Python类型30Json模块常用方法json.dumps(obj):将Python的obj编码为json类型的序列字符。json.loads(str):将Json类型序列解码(反序列化)为Python类型。json.dump(obj,file):将obj序列化后写入file文件。json.load(file):将file中的内容反序列化成obj。2.使用json模块读写二进制文件31【例4-7】Json应用示例。#eg4_7.py#导入Json模块importjson#准备测试数据i_py=2018f_py=3.14s_py='我爱学习'list_py=[1,2,3,4,5,'asd']tuple_py=(45,23)dict_py={1:'java',2:'python',3:'C#'}#将Python类型转换为Json类型i_js=json.dumps(i_py)f_js=json.dumps(f_py)s_js=json.dumps(s_py)list_js=json.dumps(list_py)tuple_js=json.dumps(tuple_py)dict_js=json.dumps(dict_py)#输出原始数和序列化后的数据print("原始数据")print(i_py)print(f_py)print(s_py)print(list_py)print(tuple_py)print(dict_py)print('序列化后:')print(i_js)print(f_js)print(s_js)print(list_js)print(tuple_js)print(dict_js)#将转换后的数据写入文件jf=open(r'd:\d\sample_json.txt','w+’)#将需要写入的数据放在一个列表中l=[i_py,f_py,s_py,list_py,tuple_py,dict_py]json.dump(l,jf)#从文件读取json类型数据jf.seek(0)h=json.load(jf)print('输出解码后的数据:')print(h)jf.close()2.使用json模块读写二进制文件用Json格式写入时,只能按字典、列表、元组和字符串等序列形式一次性写入Jsons模块只能写成文文件文件系统操作简介04OS模块操作文件就会涉及文件路径等,Python自身带有文件系统操作模块OS。有了OS模块,程序设计人员不需要关心操作系统的不同,OS模块会帮助选择正确的模块并调用。33方法功能描述chdir(path)把path设置为当前工作目录getcwd()返回当前工作目录listdir(path=’.’)列举指定目录中的文件名(‘.’表示当前目录,‘..’表示上一级目录)mkdir(path)创建一个目录remove(path)删除文件rmdir(path)删除目录,但此目录中不能有文件和文件夹removedirs(path)递归删除多级目录,目录中不能含有文件rename(old,new)重命名文件或文件夹,可实现文件的移动system(command)运行系统的shell命令walk(path)递归返回指定目录下的所有子目录,并且是由path、子目录、文件组成的三元组OS模块常用的方法属性含义描述os.curdir指代当前目录(‘.’)os.pardir指代上一级目录(‘..’)os.sep输出操作系统特定的路径分隔符(windows为‘\\’,linux为‘/’)os.linesep当前操作系统使用的行终止符(windows为‘\n\r’,linux为‘\n’)指代当前使用的操作系统OS模块常用的属性34OS应用示例>>>importos>>>os.getcwd()#返回当前的目录
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36’>>>#当前工作目录默认都是当前文件所在的文件夹>>>os.chdir("d:\\")#改变当前目录>>>os.getcwd()'d:\\'>>>os.mkdir("python2018")#创建目录python2018>>>os.chdir("d:\\python2018")#设置当前目录>>>os.getcwd()#返回当前目录'd:\\python2018'>>>os.chdir('..')#返回父目录>>>os.getcwd()'d:\\'>>>#返回当前目录下的文件和文件夹>>>os.listdir('.')['$RECYCLE.BIN','2345下载','360Downloads','893cdd3162b00bf8fd20','AtlCommon.dll','BaiduNetdiskD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床整体护理病历书写
- 极端天气对罕见病患者医疗可及性的影响
- 极端低温对血液制品冻融的影响
- 脑出血患者呼吸功能支持
- 高中“知古今”2025年历史说课稿
- 初中2025年环保行动说课稿
- 2026年河南商丘市柘城县乡镇三校初中学业水平模拟物理试卷(含答案)
- 2025-2026学年福建省莆田一中高一下学期期中英语试题(兰英班)
- 初中2025年冬陶渊明说课稿
- 初中2025书写练习主题班会说课稿
- 牙痛疾病演示课件
- 血液灌流原理及临床应用
- 乙丙橡胶的合成与发展
- 胰岛素泵临床应用及护理考核试题及答案
- 003-04-PFMEA第五版表格模板-(带实例)-2020.2.3
- 2023风力发电机组延寿评估技术规范
- 农村区域发展规划课件
- 2023江西出版集团招聘130人(共500题含答案解析)笔试必备资料历年高频考点试题摘选
- T-CWAN 0075-2023 焊接材料用原辅材料矿物粉采购技术条件
- 危险源辨识及隐患排查重点讲解
- 西南18J202 坡屋面标准图集
评论
0/150
提交评论