Python程序设计-清华大学出版社-董付国第7章-文件操作

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第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文件基本操作属性说明Closed判断文件是否关闭,若文件被关闭,则返回TrueMode返回文件的打开模式Name返回文件的名称文件对象常用方法7.1文件基本操作方法说明flush()把缓冲区的内容写入文件,不关闭文件close()把缓冲区的内容写入文件,关闭文件,释放文件对象read([size])从文件中读取size个字节的内容作为结果返回,如果省略size则表示一次性读取所有内容readline()从文本文件中读取一行内容作为结果返回readlines()把文本文件中的每行作为字符串插入列表中,返回该列表seek(offset[,whence])把文件指针移动到新的位置,offset表示相对于whence的位置。whence为0表示从文件头开始计算,1表示从当前位置开始计算,2表示从文件尾开始计算,默认为0tell()返回当前文件指针的位置truncate([size])删除从当前指针位置到文件末尾的内容。如果指定了size,则不论指针在什么位置都只留下前size个字节,其余的删除write(s)把字符串s的内容写入文件writelines(s)把字符串列表写入文本文件,不添加换行符7.2文本文件基本操作例1:向文本文件中写入内容。f=open('sample.txt','a+')s='文本文件的读取方法\n文本文件的写入方法\n'f.write(s)f.close()7.2文本文件基本操作更建议这样写:s='文本文件的读取方法\n文本文件的写入方法\n'withopen('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()print's=',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='中国山东烟台SDIBT'fp=open(r'd:\sample.txt','w')fp.write(s)11fp.close()fp=open(r'd:\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:'gbk'codeccan'tdecodebyte0xfainposition0:illegalmultibytesequence7.3文件指针操作Python2.7.8环境:s='中国山东烟台SDIBT'fp=open(r'd:\sample.txt','w')fp.write(s)fp.close()fp=open(r'd:\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=1300000000x=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=tu[0]x=tu[1]bl=tu[2]print'n=',nprint'x=',xprint'bl=',bls=f.read(9)f.close()print's=',s7.4.2使用pickle模块写入文件:importpicklef=open('sample_pickle..dat','wb')n=7i=13000000a=99.056s='中国人民123abc'lst=[[1,2,3],[4,5,6],[7,8,9]]tu=(-5,10,8)coll={4,5,6}dic={'a':'apple','b':'banana','g':'grape','o':'orange'}try: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=0whilein:x=pickle.load(f)printxi=i+1f.close()对象序列化ObjectSequencing.py7.5文件操作os模块常用的文件处理函数函数使用说明access(path)按照mode指定的权限访问文件open(filename,flag[mode=0777])按照mode指定的权限打开文件,默认权限为可读、可写、可执行chmode()改变文件的访问权限remove(path)删除指定的文件rename(src,dst)重命名文件或目录stat(path)返回文件的所有属性fstat(path)返回打开的文件的所有属性listdir(path)返回path目录下的文件和目录getcwd()返回当前路径7.5文件操作os.path模块常用的文件处理函数函数名称使用说明abspath(path)返回绝对路径dirname(p)返回目录的路径exists(path)判断文件是否存在getatime(filename)返回文件的最后访问时间getctime(filename)返回文件的创建时间getmtile(filename)返回文件的最后修改时间getsize(filename)返回文件的大小isabs(path)、isdir(path)、isfile(path)判断path是否为绝对路径、目录、文件split(path)对路径进行分割,以列表形式返回splitext(path)从路径中分割文件的扩展名splitdrive(path)从路径中分割驱动器的名称walk(top,func,arg)遍历目录7.5文件操作importosimportos.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_exp\\new_test.txt'os.path.dirname(path)'d:\\mypython_exp'os.path.split(path)('d:\\mypython_exp','new_test.txt')os.path.splitdrive(path)('d:','\\mypython_exp\\new_test.txt')os.path.splitext(path)('d:\\mypython_exp\\new_test','.txt')7.5文件操作复制文件importshutilshutil.copyfi

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功