您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > Python程序设计-清华大学出版社-董付国第7章-文件操作
第7章文件操作为了长期保存数据,方便修改和共享,就必须将数据以文件的形式存储到外部存储介质(如磁盘)中。MIS是使用数据库来存储数据的,而应用程序的配置信息是使用文件来存储的;图形、图像通常也是用文件来存储的。文件在软件开发中占有重要的地位。按文件中数据的组织形式把文件分为文本文件和二进制文件两类。(1)文本文件文本文件存储的是常规字符串,由文本行组成,通常以换行符'\n'结尾,只能读写常规字符串。文本文件可以用字处理软件如gedit、记事本进行编辑。常规字符串是指文本编辑器能正常显示、编辑的字符串。如,英文字母串,汉字串,数字串(不是数字)。(2)二进制文件二进制文件把对象在内存中的内容以字节串(bytes)进行存储。不能用字处理软件进行编辑。7.1文件基本操作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文件指针操作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模块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模块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.copyfile('c:\\dir.txt','c:\\dir1.txt')7.5文件操作列出当前目录下所有扩展名为pyc的文件importosprint[fnameforfnameinos.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(.)iffilename[pos+1:]==html:newname=filename[:pos+1]+htmos.rename(filename,newname)print(filename+更名为:+newname)7.6目录操作os模块常用的目录操作函数函数名称使用说明mkdir(path[,mode=0777])创建目录makedirs(path1/path2…,mode=511)创建多级目录rmdir(path)删除目录removedirs(path1/path2…)删除多级目录listdir(path)返回指定目录下所有文件信息getcwd()返回当前工作目录chdir(path)把path设为当前工作目录Walk(top,topdown=True,onrror=None)遍历目录树7.6目录操作递归遍历文件夹importosdefvisitDir(path):ifnotos.path.isdir(path):print'Error:',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):print'Error:',path,'isnotadir
本文标题:Python程序设计-清华大学出版社-董付国第7章-文件操作
链接地址:https://www.777doc.com/doc-7356718 .html