第8章文件与文件夹操作.pptx

上传人:可****阿 文档编号:75317035 上传时间:2023-03-03 格式:PPTX 页数:34 大小:293.47KB
返回 下载 相关 举报
第8章文件与文件夹操作.pptx_第1页
第1页 / 共34页
第8章文件与文件夹操作.pptx_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《第8章文件与文件夹操作.pptx》由会员分享,可在线阅读,更多相关《第8章文件与文件夹操作.pptx(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第8 8章章 文件与文件文件与文件夹夹操作操作董付国董付国微信公众号:微信公众号:PythonPython小屋小屋本章学习目标了解文件的概念了解常见的文件扩展名理解文本文件与二进制的区别熟练掌握内置函数open()的用法理解内置函数open()的mode参数与encoding参数作用熟练掌握使用文件对象的方法读写文件内容的用法熟练掌握上下文管理语句with的用法熟练掌握os、os.path、shutil模块的使用8.1 文本文件操作与二进制文件内容操作文件是长久保存信息并支持重复使用和反复修改的重要方式,同时也是信息交换的重要途径。记事本文件、日志文件、各种配置文件、数据库文件、图像文件、音

2、频视频文件、可执行文件、office文档、动态链接库文件等等,都以不同的文件形式存储在各种存储设备(如磁盘、U盘、光盘、云盘、网盘等等)上。8.1 文本文件操作与二进制文件内容操作按数据组织形式的不同,可以把文件分为文本文件和二进制文件两大类。(1)文本文件文本文件可以使用记事本、Notepad+、vim、gedit、ultraedit、Emacs、Sublime Text3、IDLE或类似软件直接进行显示和编辑,并且人类能够直接阅读和理解。文本文件由若干文本行组成,每行以换行符结束,文件中包含英文字母、汉字、数字字符串、标点符号等。扩展名为.txt、.log、.ini、.c、.cpp、.h、

3、.py、.pyw、.html、.js、.css、.csv、.json的文件都属于文本文件。8.1 文本文件操作与二进制文件内容操作(2)二进制文件数据库文件、图像文件、可执行文件、动态链接库文件、音频文件、视频文件、Office文档等均属于二进制文件。二进制文件无法用记事本或其他普通字处理软件正常进行显示和编辑,人类也无法直接阅读和理解,需要使用正确的软件进行解码或反序列化之后才能正确地读取、显示、修改或执行。二进制文件的扩展名非常多,很多软件都会定义自己的扩展名,例如.docx、.xlsx、.pptx、.dat、.exe、.dll、.pyd、.so、.mp4、.bmp、.png、.jpg、.

4、rm、.rmvb、.avi、.db、.sqlite、.mp3、.wav、.ogg都属于二进制文件。8.1.1 内置函数open()open(file,mode=r,buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)参数file指定要操作的文件名称,如果该文件不在当前文件夹或子文件夹中,建议使用绝对路径,确保从当前工作文件夹出发可以访问到该文件。建议使用原始字符串。参数mode指定打开文件后的处理方式,或者说打开文件以后要做什么。参数encoding指定对文本进行编码和解码的方式,只适用于文本

5、模式。8.1.1 内置函数open()如果执行成功,open()函数返回1个文件对象,然后通过这个文件对象的方法可以对文件进行读写操作,最后调用文件对象的close()方法关闭文件。如果指定的文件路径不存在、访问权限不够、磁盘空间不够或其他原因导致创建文件对象失败则抛出IOError异常。8.1.1 内置函数open()参数参数mode取取值说说明明r只读模式(默认模式,可省略),文件不存在或没有访问权限时抛出异常,成功打开时文件指针位于文件头部开始处w只写模式,如果文件已存在就先清空原有内容,文件不存在时创建新文件,成功打开时文件指针位于文件头部开始处x只写模式,创建新文件,如果文件已存在则

6、抛出异常,成功打开时文件指针位于文件头部开始处a追加模式,文件已存在时不覆盖文件中原有内容,成功打开时文件指针位于文件尾部;文件不存在时创建新文件b二进制模式(可与r、w、x或a模式组合使用),使用二进制模式打开文件时不允许同时指定encoding参数t文本模式(默认模式,可省略)+读、写模式(可与其他模式组合使用)8.1.2 文件对象常用方法方法方法功能功能说说明明close()把写缓冲区的内容写入文件,同时关闭文件,释放文件对象flush()把写缓冲区里的内容写入文件,不关闭文件read(size=-1,/)从以r、r+模式打开的文本文件中读取并返回最多size个字符,或从以rb、rb+模

7、式打开的二进制文件中读取并返回最多size个字节,参数size的默认值-1表示读取文件中全部内容。每次读取时从文件指针当前位置开始读,读取完成后自动修改文件指针到读取结束的下一个位置readable()当前文件可读时返回True,否则返回Falsereadline(size=-1,/)参数size=-1时从以r、r+模式打开的文本文件中读取当前位置开始到下一个换行符(包含)之前的所有内容,如果当前已经到达文件尾就返回空字符串。如果参数size为正整数则读取当前位置开始到下一个换行符(包含)之间的最多size个字符,指定负整数时与-1等价。每次读取时从文件指针当前位置开始读,读取完成后自动修改文

8、件指针到读取结束的下一个位置readlines(hint=-1,/)参数hint=-1时从以r、r+模式打开的文本文件中读取所有内容,返回包含每行字符串的列表,读取完成之后把文件指针移动到文件尾部;参数hint为正整数时从当前位置开始读取若干连续完整的行,如果已读取的字符数量超过hint的值就停止读取8.1.2 文件对象常用方法seek(cookie,whence=0,/)定位文件指针,把文件指针移动到相对于whence的偏移量为cookie个字节的位置。其中whence为0表示文件头,1表示当前位置,2表示文件尾。对于文本文件,whence=2时cookie必须为0;对于二进制文件,when

9、ce=2时cookie可以为负数。不论以文本模式还是二进制模式打开文件,都是以字节为单位进行定位seekable()当前文件支持随机访问时返回True,否则返回Falsetell()返回文件指针的当前位置,单位为字节truncate(pos=None,/)截断文件内容,只保留参数pos指定数量的前面部分字节,如果没有指定参数只保留当前位置前面的内容,返回新的大小write(text,/)把text的内容写入文件,如果写入文本文件则text应该是字符串,如果写入二进制文件则text应该是字节串。返回写入内容的长度writable()当前文件可写时返回True,否则返回Falsewriteline

10、s(lines,/)把列表lines中的所有字符串写入文本文件,并不在lines中每个字符串后面自动增加换行符。也就是说,如果确实想让lines中的每个字符串写入文本文件之后各占一行,应由程序员保证每个字符串都以换行符结束8.1.2 文件对象常用方法使用read()、readline()和write()方法读写文件内容时,都是从当前位置开始读写,并且读写完成之后表示当前位置的文件指针会自动向后移动。例如,使用r模式打开文件之后文件指针位于文件头,调用方法read(5)读取5个字符,此时文件指针指向第6个字符,再次使用read()方法读取内容时,从第6个字符开始。如果需要从指定的位置开始读写,可

11、以调用seek()方法来移动文件指针。8.1.3 上下文管理语句with1)管理单个文件对象with open(filename,mode,encoding)as fp:#这里写通过文件对象fp读写文件内容的语句2)同时管理多个文件对象with open(python.exe,rb)as fp1,open(data.txt,r)as fp2:#通过文件对象fp1和fp2的方法读写文件内容8.1.4 文件操作例题解析例例8-1 已知文本文件data.txt中有若干行正整数,每行20个正整数且相邻正整数之间使用英文半角逗号分隔。编写程序,读取这些正整数,按升序排序后再写入文本文件data_asc.

12、txt中,要求结果文件中每行也是20个正整数。8.1.4 文件操作例题解析with open(data.txt)as fp:#读取全部内容,使用换行符分隔成多行,不保留换行符 lines=fp.read().splitlines()#把所有行连接起来,再使用逗号分隔,得到包含所有数字字符串的列表digits=,.join(lines).split(,)#按转换成数字之后的大小升序排序digits.sort(key=int)with open(data_asc.txt,w)as fp:#每行20个数字,写入新文件 for i in range(0,len(digits),20):line=,.j

13、oin(digitsi:i+20)+n fp.write(line)8.1.4 文件操作例题解析例例8-2 编写程序,读取并输出Python安装目录中文本文件news.txt的所有行内容。with open(news.txt,encoding=utf8)as fp:for line in fp:print(line)8.1.4 文件操作例题解析例例8-3 在作者的微信公众号“Python小屋”中维护了一个历史文章清单,可以通过手机关注微信公众号“Python小屋”之后进入菜单“最新资源”=“历史文章”获得地址https:/ 文件操作例题解析例例8-4 在例8-3中提到的公众号链接中有若干图片,

14、编写程序,读取其中所有图片并下载到本地,所有图片按序号分别保存为0.png、1.png、2.png、.。code例8-4.py8.1.4 文件操作例题解析from re import findall,subfrom urllib.request import urlopen#要采集图片的网址url=rhttps:/ urlopen(url)as fp:#读取全部网页源代码,使用UTF-8编码格式进行解码 content=fp.read().decode()#正则表达式,提取所有图片链接地址#圆括号内是要提取的内容pattern=rimg.*?data-src=(.+?)for index,pi

15、cUrl in enumerate(findall(pattern,content):#使用关键字with同时管理两个文件对象 with open(findex.png,wb)as fpLocal,urlopen(picUrl)as fpUrl:#读取网上的图片数据,直接写入本地图片文件 fpLocal.write(fpUrl.read()8.2 文件级与文件夹级操作本节主要介绍os、os.path、shutil这三个标准库对文件和文件夹(也称目录,两个概念不做区分)的操作,例如查看文件清单、删除文件、获取文件属性、路径连接、创建/删除文件夹、重命名、压缩与解压缩等。8.2.1 标准库os、o

16、s.path、shutil中的常用成员成员成员功能功能说说明明chdir(path)把path设为当前工作文件夹chmod(path,mode,*,dir_fd=None,follow_symlinks=True)修改文件的访问权限curdir表示当前文件夹的字符串,在Windows平台上总是.getcwd()返回表示当前工作文件夹的字符串getcwdb()放回表示当前工作文件夹的字节串getenv(key,default=None)返回系统变量的值,例如os.getenv(temp)、os.getenv(path)get_exec_path(env=None)启动进程时搜索可执行文件的路径顺

17、序listdir(path=None)返回path文件夹中的文件和子文件夹名字组成的列表,path默认值None表示返回当前文件夹中的文件和子文件夹名字组成的列表8.2.1 标准库os、os.path、shutil中的常用成员mkdir(path,mode=511,*,dir_fd=None)创建文件夹,在Windows平台上mode参数无效pardir表示上一级文件夹的字符串,在Windows平台上总是.rmdir(path,*,dir_fd=None)删除path指定的文件夹,要求其中不能有文件或子文件夹remove(path,*,dir_fd=None)删除指定的文件,要求用户拥有删除文

18、件的权限,并且文件没有只读或其他特殊属性rename(src,dst,*,src_dir_fd=None,dst_dir_fd=None)重命名文件或文件夹scandir(path=None)返回包含给定路径path中每个对象的迭代器对象,每个对象对应于一个DirEntry对象,该对象具有is_file()、is_dir()等方法8.2.1 标准库os、os.path、shutil中的常用成员sep文件路径中的分隔符,在Windows平台上是反斜线startfile(filepath ,operation)使用关联的应用程序打开指定文件或启动指定应用程序,如果参数filepath指定的是URL

19、,会自动使用默认浏览器打开这个地址stat(path,*,dir_fd=None,follow_symlinks=True)查看文件的属性,包括创建时间、最后访问时间、最后修改时间、大小等等walk(top,topdown=True,onerror=None,followlinks=False)目录树生成器,对于以参数top为根的整个目录树上每个目录dirpath,生成一个元组(dirpath,dirnames,filenames),其中dirnames为dirpath中的所有子目录名称列表,filenames为dirpath中的所有文件名列表8.2.1 标准库os、os.path、shuti

20、l中的常用成员成员成员功能功能说说明明abspath(path)返回给定路径的绝对路径basename(p)返回指定路径的最后一个路径分隔符后面的部分,例如basename(rC:Python38python.exe)的值为python.execommonpath(paths)返回多个路径的最长共同路径,例如commonpath(rvcabcd,rvcabed)的结果为vccommonprefix(m)返回多个路径的共同前缀部分,例如commonprefix(rvcabcd,rvcabed)的结果为vcabdirname(p)返回给定路径的最后一个路径分隔符前面的部分,例如dirname(rC

21、:Python38python.exe)的值为C:Python38exists(path)判断指定的路径是否存在,返回True或False8.2.1 标准库os、os.path、shutil中的常用成员getatime(filename)返回表示文件最后访问时间的纪元秒数(从1970年1月1日0时0分0秒开始计算,经过的秒数)getctime(filename)返回表示文件创建时间(Windows)或元数据最后修改时间(Unix)的纪元秒数getmtime(filename)返回表示文件最后修改时间的纪元秒数getsize(filename)返回文件的大小,单位为字节isdir(s)判断指定的

22、路径是否为文件夹,返回True或Falseisfile(path)判断指定的路径是否为文件,返回True或Falsejoin(path,*paths)连接两个或多个path,相邻路径之间插入路径分隔符,返回连接后的字符串normcase(s)把路径中所有字母改为小写,把所有斜线改为反斜线split(path)以路径中的最后一个斜线为分隔符把路径分隔成两部分,返回列表splitext(path)从路径中分隔文件的扩展名,返回列表splitdrive(path)从路径中分隔驱动器的名称,返回列表8.2.1 标准库os、os.path、shutil中的常用成员from time import loc

23、altime,strftimeimport os.path as pathfn=rC:Python38Python.exectime=path.getctime(fn)atime=path.getatime(fn)mtime=path.getmtime(fn)print(ctime,atime,mtime,sep=,)#%Y表示4位年份,%m表示月份,%d表示天数#%H表示24小时制的小时数,%M表示分钟,%S表示秒数#更多格式可以查阅Python标准库time的官方帮助文档func=lambda t:strftime(%Y-%m-%d%H:%M:%S,localtime(t)print(*m

24、ap(func,ctime,atime,mtime),sep=,)8.2.1 标准库os、os.path、shutil中的常用成员函数函数功能功能说说明明copy(src,dst,*,follow_symlinks=True)复制文件,新文件具有同样的文件属性,如果目标文件已存在则抛出异常copy2(src,dst,*,follow_symlinks=True)复制文件数据和元数据(包括访问控制权限、最后访问时间、最后修改时间等属性)copyfile(src,dst,*,follow_symlinks=True)复制文件,不复制文件属性,如果目标文件已存在则直接覆盖copytree(src,d

25、st,symlinks=False,ignore=None,copy_function=,ignore_dangling_symlinks=False,dirs_exist_ok=False)递归复制目录树,返回目标文件夹8.2.1 标准库os、os.path、shutil中的常用成员disk_usage(path)查看磁盘使用情况,返回形如usage(total=910534111232,used=140844224512,free=769689886720)的具名元组,单位为字节move(src,dst,copy_function=)移动文件或递归移动文件夹,也可以用来给文件和文件夹重命名

26、rmtree(path)删除整个文件夹以及其中的所有文件和子文件夹make_archive(base_name,format,root_dir=None,base_dir=None)创建tar或zip格式的压缩文件unpack_archive(filename,extract_dir=None,format=None)解压缩8.2.1 标准库os、os.path、shutil中的常用成员(1)把C:dir1.txt文件复制到D:dir2.txtimport shutilshutil.copyfile(C:dir1.txt,D:dir2.txt)(2)把C:Python38Dlls文件夹以及该文

27、件夹中所有文件压缩至D:a.zip文件shutil.make_archive(D:a,zip,C:Python38,Dlls)(3)把刚压缩得到的文件D:a.zip解压缩至D:a_unpack文件夹shutil.unpack_archive(D:a.zip,D:a_unpack)(4)删除刚刚解压缩得到的文件夹shutil.rmtree(D:a_unpack)(5)递归复制文件夹,忽略扩展名为.pyc的文件和以“新”开头的文件和子文件夹from shutil import copytree,ignore_patternscopytree(C:python38test,D:des_test,ig

28、nore=ignore_patterns(*.pyc,新*)8.2.2 文件夹操作例题解析例例8-5 编写程序,按照深度优先的顺序递归遍历并输出指定文件夹的目录树结构,包括所有文件及其所有子文件夹中的文件名。code例8-5.py8.2.2 文件夹操作例题解析from os import listdirfrom os.path import join,isfile,isdirdef listDirDepthFirst(directory):#遍历文件夹,如果是文件就直接输出#如果是文件夹,就输出显示,然后递归遍历该文件夹 for subPath in listdir(directory):pa

29、th=join(directory,subPath)#这里的双分支选择结构可以简化为单分支选择结构,自己试试看 if isfile(path):print(path)elif isdir(path):print(path)listDirDepthFirst(path)listDirDepthFirst(rD:)8.2.2 文件夹操作例题解析例例8-6 编写程序,按照广度优先的顺序遍历并输出指定文件夹的目录树结构,包括所有文件及其所有子文件夹中的文件名。code例8-6.py8.2.2 文件夹操作例题解析from os import listdir,getcwdfrom os.path impo

30、rt join,isdirdef listDirWidthFirst(directory):dirs=directory while dirs:current=dirs.pop(0)#遍历该文件夹,如果是文件就直接输出显示#如果是文件夹,输出显示后,追加到列表尾部表示需要遍历的文件夹 for subPath in listdir(current):path=join(current,subPath)print(path)if isdir(path):#记下这个文件夹,后面再处理其中的文件和子文件夹 dirs.append(path)listDirWidthFirst(getcwd()8.2.2

31、 文件夹操作例题解析例例8-7 编写程序,递归遍历并删除指定文件夹及其所有子文件夹中扩展名为.tmp或.obj的文件,如果某个文件无法删除就直接忽略。code例8-7.py8.2.2 文件夹操作例题解析from os.path import isdir,join,splitextfrom os import remove,listdir#指定要删除的文件类型filetypes=(.tmp,.obj)def delCertainFiles(directory):for filename in listdir(directory):#一定要理解和记住这里join()函数的作用 temp=join(directory,filename)if isdir(temp):delCertainFiles(temp)elif splitext(temp)1 in filetypes:try:remove(temp)print(ftemp deleted.)except:print(ftemp ignored.)delCertainFiles(rD:test)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁