




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章文件操作,为了长期保存数据,方便修改和共享,就必须将数据以文件的形式存储到外部存储介质(如磁盘)中。MIS是使用数据库来存储数据的,而应用程序的配置信息是使用文件来存储的;图形、图像通常也是用文件来存储的。文件在软件开发中占有重要的地位。,按文件中数据的组织形式把文件分为文本文件和二进制文件两类。(1)文本文件文本文件存储的是常规字符串,由文本行组成,通常以换行符n结尾,只能读写常规字符串。文本文件可以用字处理软件如gedit、记事本进行编辑。常规字符串是指文本编辑器能正常显示、编辑的字符串。如,英文字母串,汉字串,数字串(不是数字)。(2)二进制文件二进制文件把对象在内存中的内容以字节串(bytes)进行存储。不能用字处理软件进行编辑。,7.1文件基本操作,文件对象名=open(文件名,打开方式,缓冲区)(1)文件名指定了被打开的文件名称。(2)打开模式指定了打开文件后的处理方式,见表7-1。(3)缓冲区指定了读写文件的缓存模式。0表示不缓存,1表示缓存,如大于1则表示缓冲区的大小。默认值是缓存模式。(4)open()函数返回1个文件对象,该对象可以对文件进行各种操作。例如:f1=open(file1.txt,r)f2=open(file2.txt,w),7.1文件基本操作,文件打开方式,文件常用属性,7.1文件基本操作,文件对象常用方法,7.1文件基本操作,7.2文本文件基本操作,例1:向文本文件中写入内容。f=open(sample.txt,a+)s=文本文件的读取方法n文本文件的写入方法nf.write(s)f.close(),7.2文本文件基本操作,更建议这样写:s=文本文件的读取方法n文本文件的写入方法nwithopen(sample.txt,a+)asf:f.write(s)使用with自动关闭资源。可以在代码块执行完毕后还原进入该代码块时的现场。不论何种原因跳出with块,总能保证文件被正确关闭。,7.2文本文件基本操作,例2:读取并显示文本文件的前5个字节。(Python2)f=open(sample.txt,r)s=f.read(5)#读取文件的前5个字节f.close()prints=,sprint字符串s的长度(字符个数)=,len(s),7.2文本文件基本操作,例3:读取并显示文本文件的前5个字符。(Python3)f=open(sample.txt,r)s=f.read(5)#读取文件的前5个字符f.close()print(s=,s)print(字符串s的长度(字符个数)=,len(s),7.2文本文件基本操作,例4:读取并显示文本文件所有行。f=open(F7_2.txt,r)whileTrue:line=f.readline()ifline=:breakprintline,#逗号不会产生换行符,但文件中有换行符,因此会换行f.close(),7.2文本文件基本操作,或者可以这样写:f=open(F7_2.txt,r)li=f.readlines()forlineinli:printline,f.close(),7.3文件指针操作,对于read和write方法,当操作完成后,都会自动移动文件指针。为了能做到在文件的任何位置读写内容,需要用seek()方法移动文件指针。(1)seek(n),其中n=0,seek(0)表示文件指针移到文件头;n0时,表示移动到文件头之后的位置。从任意位置读取内容时或从任意位置覆盖内容时需要这样做。(2)seek(0,2)表示把文件指针移到文件尾。在追加新内容时需要这样做。注意:不论是二进制文件还是文本文件,指针的相对位置的计算都是以字节为单位。,7.3文件指针操作,Python3.4.2环境:s=中国山东烟台SDIBTfp=open(rd:sample.txt,w)fp.write(s)11fp.close()fp=open(rd:sample.txt,r)print(fp.read(3)中国山fp.seek(2)2print(fp.read(1)国fp.seek(13)13print(fp.read(1)Dfp.seek(15)15print(fp.read(1)Bfp.seek(3)3print(fp.read(1)出错信息UnicodeDecodeError:gbkcodeccantdecodebyte0 xfainposition0:illegalmultibytesequence,7.3文件指针操作,Python2.7.8环境:s=中国山东烟台SDIBTfp=open(rd:sample.txt,w)fp.write(s)fp.close()fp=open(rd:sample.txt,r)print(fp.read(3)fp.seek(2)print(fp.read(3)print(fp.read(2)蕉,7.4二进制文件操作,数据库文件、图像文件、可执行文件、音频视频文件等等均属于二进制文件。对于二进制文件,不能使用记事本或其他文本编辑软件进行正常读写。,7.4.1使用struct模块,例:使用struct模块写入二进制文件:importstructn=1300000000 x=96.45b=Trues=a1中国sn=struct.pack(if?,n,x,b)#把整数n、浮点数x、布尔对象b依次转换为字节串f=open(sample_struct.dat,wb)f.write(sn)#写入字节串f.write(s)#字符串可直接写入f.close(),7.4.1使用struct模块,例:使用struct模块读取二进制文件。importstructf=open(sample_struct.dat,rb)sn=f.read(9)tu=struct.unpack(if?,sn)#从字节串sn中还原出1个整数、1个浮点数和1个布尔值,并返回元组print(tu)n=tu0x=tu1bl=tu2printn=,nprintx=,xprintbl=,bls=f.read(9)f.close()prints=,s,7.4.2使用pickle模块,写入文件:importpicklef=open(sample_pickle.dat,wb)n=7i=13000000a=99.056s=中国人民123abclst=1,2,3,4,5,6,7,8,9tu=(-5,10,8)coll=4,5,6dic=a:apple,b:banana,g:grape,o:orangetry:pickle.dump(n,f)#表示后面将要写入的数据个数pickle.dump(i,f)#把整数i转换为字节串,并写入文件pickle.dump(a,f)pickle.dump(s,f)pickle.dump(lst,f)pickle.dump(tu,f)pickle.dump(coll,f)pickle.dump(dic,f)except:print写文件异常!#如果写文件异常则跳到此处执行f.close(),7.4.2使用pickle模块,读取二进制文件:importpicklef=open(sample_pickle.dat,rb)n=pickle.load(f)#读出文件的数据个数i=0whileiimportosimportos.pathos.path.exists(test1.txt)Falseos.rename(c:test1.txt,d:test2.txt)#此时c:test1.txt不存在出错信息os.rename(c:dfg.txt,d:test2.txt)#os.rename可以实现文件的改名和移动os.path.exists(c:dfg.txt)Falseos.path.exists(d:dfg.txt)Falseos.path.exists(d:test2.txt)Truepath=d:mypython_expnew_test.txtos.path.dirname(path)d:mypython_expos.path.split(path)(d:mypython_exp,new_test.txt)os.path.splitdrive(path)(d:,mypython_expnew_test.txt)os.path.splitext(path)(d:mypython_expnew_test,.txt),7.5文件操作,复制文件importshutilshutil.copyfile(c:dir.txt,c:dir1.txt),7.5文件操作,列出当前目录下所有扩展名为pyc的文件importosprintfnameforfnameinos.listdir(os.getcwd()ifos.path.isfile(fname)andfname.endswith(.pyc)consts.pyc,database_demo.pyc,nqueens.pyc,7.5文件操作,将当前目录的所有扩展名为“html”的文件修改为扩展名为“htm”的文件:importosfile_list=os.listdir(.)forfilenameinfile_list:pos=filename.rindex(.)iffilenamepos+1:=html:newname=filename:pos+1+htmos.rename(filename,newname)print(filename+更名为:+newname),7.6目录操作,os模块常用的目录操作函数,7.6目录操作,递归遍历文件夹importosdefvisitDir(path):ifnotos.path.isdir(path):printError:,path,isnotadirectoryordoesnotexist.returnforlistsinos.listdir(path):sub_path=os.path.join(path,lists)printsub_pathifos.path.isdir(sub_path):visitDir(sub_path)visitDir(E:test),7.6目录操作,使用os.walk函数遍历importosdefvisitDir2(path):ifnotos.path.isdir(path):printError:,path,isnotadirectoryordoesnotexist.returnlist_dirs=os.walk(path)#os.walk返回一个元组,包括3个元素:所有路径名、所有目录列表与文件列表forroot,dirs,filesinlist_dirs:#遍历该元组的目录和文件信息fordindirs:printos.path.join(root,d)#获取完整路径forfinfiles:printos.path.join(root,f)#获取文件绝对路径visitDir2(h:music),7.6目录操作,使用os.path.walk函数遍历目录defvisitDir3(arg,dirname,names):forfilepathinnames:printos.path.join(dirname,filepath)os.path.walk(h:music,visitDir3,(),7.7高级话题,计算CRC32值importzlibprintzlib.crc32(1234)-1679564637printzlib.crc32(111)1298878781printzlib.crc32(SDIBT)2095416137importbinasciibinascii.crc32(SDIBT)2095416137,7.7高级话题,计算文本文件中最长行的长度方法一:f=open(d:test.txt,r)allLineLens=len(line.strip()forlineinff.close()longest=max(allLineLens)printlongest方法二:f=open(d:test.txt,r)longest=max(len(line.strip()forlineinf)f.close()printlongest,7.7高级话题,计算MD5值importhashlibimportmd5md5value=hashlib.md5()md5value.update(12345)md5value=md5value.hexdigest()printmd5value827ccb0eea8a706c4c34a16891f84e7bmd5value=md5.md5()md5value.update(12345)md5value=md5value.hexdigest()printmd5value827ccb0eea8a706c4c34a16891f84e7b,7.7高级话题,判断一个文件是否为GIF图像文件defis_gif(fname):f=open(fname,r)first4=tuple(f.read(4)printfirst4f.close()returnfirst4=(G,I,F,8)is_gif(c:test.gif)(G,I,F,8)Trueis_gif(c:dir.txt)False,7.7高级话题,比较两个文本文件是否相同importdifflibA=file(c:dir.txt,r)B=file(c:dir1.txt,r)contextA=A.read()contextB=B.read()s=difflib.SequenceMatcher(lambdax:x=,contextA,contextB)result=s.get_opcodes()fortag,i1,i2,j1,j2inresult:print(%scontextA%d:%d=%scontextB%d:%d=%s%(tag,i1,i2,contextAi1:i2,j1,j2,contextBj1:j2),7.7高级话题,使用xlwt写入Excel文件fromxlwtimport*book=Workbook()sheet1=book.add_sheet(First)al=Alignment()al.horz=Alignment.HORZ_CENTERal.vert=Alignme
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 毕业论文要求
- 教育行业培训师工作指南
- 法学专业毕业论文初稿
- 本科毕业论文实证
- 教师资格考试幼儿园综合素质2025年上半年自测试卷及答案
- 2025年《内科》住院医师规范化培训结业理论考试题库及答案
- 铁路大专专业毕业论文
- 毕业论文参考文献模板
- 酒店用品酒店智能客房管理系统研发计划书
- 机电专业毕业论文文本
- 高级综合英语知到智慧树章节测试课后答案2024年秋浙江中医药大学
- 电信行业网络优化与安全保障措施
- 《无人机搭载红外热像设备检测建筑外墙及屋面作业》
- JJF(京) 114-2023 安德森六级撞击微生物采样器校准规范
- 番茄病毒病图谱及简介
- 幼儿园情商培训
- 承插盘扣落地脚手架施工方案
- 物流无人机技术与应用解决方案
- DB14∕T 1822-2019 旅游景区安全评估规范
- 非营利性医疗机构医保政策制度
- 床边护理查体内容
评论
0/150
提交评论