python中pathlib模块的基本用法与总结
前言
相比常用的os.path而言,pathlib对于目录路径的操作更简介也更贴近Pythonic。但是它不单纯是为了简化操作,还有更大的用途。
pathlib是Python内置库,Python文档给它的定义是:Thepathlibmodule–object-orientedfilesystempaths(面向对象的文件系统路径)。pathlib提供表示文件系统路径的类,其语义适用于不同的操作系统。
更多详细的内容可以参考官方文档:https://docs.python.org/3/library/pathlib.html#methods
1.pathlib模块下Path类的基本使用
frompathlibimportPath path=r'D:\python\pycharm2020\program\pathlib模块的基本使用.py' p=Path(path) print(p.name)#获取文件名 print(p.stem)#获取文件名除后缀的部分 print(p.suffix)#获取文件后缀 print(p.parent)#相当于dirname print(p.parent.parent.parent) print(p.parents)#返回一个iterable包含所有父目录 foriinp.parents: print(i) print(p.parts)#将路径通过分隔符分割成一个元组
运行结果如下:
pathlib模块的基本使用.py
pathlib模块的基本使用
.py
D:\python\pycharm2020\program
D:\python
D:\python\pycharm2020\program
D:\python\pycharm2020
D:\python
D:\
('D:\\','python','pycharm2020','program','pathlib模块的基本使用.py')
- Path.cwd():Returnanewpathobjectrepresentingthecurrentdirectory
- Path.home():Returnanewpathobjectrepresentingtheuser'shomedirectory
- Path.expanduser():Returnanewpathwithexpanded~and~userconstructs
frompathlibimportPath path_1=Path.cwd()#获取当前文件路径 path_2=Path.home() p1=Path('~/pathlib模块的基本使用.py') print(path_1) print(path_2) print(p1.expanduser())
运行结果如下:
D:\python\pycharm2020\program
C:\Users\Administrator
C:\Users\Administrator\pathlib模块的基本使用.py
Path.stat():Returnaos.stat_resultobjectcontaininginformationaboutthispath
frompathlibimportPath importdatetime p=Path('pathlib模块的基本使用.py') print(p.stat())#获取文件详细信息 print(p.stat().st_size)#文件的字节大小 print(p.stat().st_ctime)#文件创建时间 print(p.stat().st_mtime)#上次修改文件的时间 creat_time=datetime.datetime.fromtimestamp(p.stat().st_ctime) st_mtime=datetime.datetime.fromtimestamp(p.stat().st_mtime) print(f'该文件创建时间:{creat_time}') print(f'上次修改该文件的时间:{st_mtime}')
运行结果如下:
os.stat_result(st_mode=33206,st_ino=3659174698076635,st_dev=3730828260,st_nlink=1,st_uid=0,st_gid=0,st_size=543,st_atime=1597366826,st_mtime=1597366826,st_ctime=1597320585)
543
1597320585.7657475
1597366826.9711637
该文件创建时间:2020-08-1320:09:45.765748
上次修改该文件的时间:2020-08-1409:00:26.971164
从不同.stat().st_属性返回的时间戳表示自1970年1月1日以来的秒数,可以用datetime.fromtimestamp将时间戳转换为有用的时间格式。
Path.exists():Whetherthepathpointstoanexistingfileordirectory
Path.resolve(strict=False):Makethepathabsolute,resolvinganysymlinks.Anewpathobjectisreturned
frompathlibimportPath p1=Path('pathlib模块的基本使用.py')#文件 p2=Path(r'D:\python\pycharm2020\program')#文件夹 absolute_path=p1.resolve() print(absolute_path) print(Path('.').exists()) print(p1.exists(),p2.exists()) print(p1.is_file(),p2.is_file()) print(p1.is_dir(),p2.is_dir()) print(Path('/python').exists()) print(Path('non_existent_file').exists())
运行结果如下:
D:\python\pycharm2020\program\pathlib模块的基本使用.py
True
TrueTrue
TrueFalse
FalseTrue
True
False
Path.iterdir():Whenthepathpointstoadirectory,yieldpathobjectsofthedirectorycontents
frompathlibimportPath p=Path('/python') forchildinp.iterdir(): print(child)
运行结果如下:
\python\Anaconda
\python\EVCapture
\python\Evernote_6.21.3.2048.exe
\python\Notepad++
\python\pycharm-community-2020.1.3.exe
\python\pycharm2020
\python\pyecharts-assets-master
\python\pyecharts-gallery-master
\python\Sublimetext3
Path.glob(pattern):Globthegivenrelativepatterninthedirectoryrepresentedbythispath,yieldingallmatchingfiles(ofanykind),The“**”patternmeans“thisdirectoryandallsubdirectories,recursively”.Inotherwords,itenablesrecursiveglobbing.
Note:Usingthe“**”patterninlargedirectorytreesmayconsumeaninordinateamountoftime
递归遍历该目录下所有文件,获取所有符合pattern的文件,返回一个generator。
获取该文件目录下所有.py文件
frompathlibimportPath path=r'D:\python\pycharm2020\program' p=Path(path) file_name=p.glob('**/*.py') print(type(file_name))#foriinfile_name: print(i)
获取该文件目录下所有.jpg图片
frompathlibimportPath path=r'D:\python\pycharm2020\program' p=Path(path) file_name=p.glob('**/*.jpg') print(type(file_name))#foriinfile_name: print(i)
获取给定目录下所有.txt文件、.jpg图片和.py文件
frompathlibimportPath defget_files(patterns,path): all_files=[] p=Path(path) foriteminpatterns: file_name=p.rglob(f'**/*{item}') all_files.extend(file_name) returnall_files path=input('>>>请输入文件路径:') results=get_files(['.txt','.jpg','.py'],path) print(results) forfileinresults: print(file)
Path.mkdir(mode=0o777,parents=False,exist_ok=False)
- Createanewdirectoryatthisgivenpath.Ifmodeisgiven,itiscombinedwiththeprocess'umaskvaluetodeterminethefilemodeandaccessflags.Ifthepathalreadyexists,FileExistsErrorisraised.
- Ifparentsistrue,anymissingparentsofthispatharecreatedasneeded;theyarecreatedwiththedefaultpermissionswithouttakingmodeintoaccount(mimickingthePOSIXmkdir-pcommand).
- Ifparentsisfalse(thedefault),amissingparentraisesFileNotFoundError.
- Ifexist_okisfalse(thedefault),FileExistsErrorisraisedifthetargetdirectoryalreadyexists.
- Ifexist_okistrue,FileExistsErrorexceptionswillbeignored(samebehaviorasthePOSIXmkdir-pcommand),butonlyifthelastpathcomponentisnotanexistingnon-directoryfile.
Changedinversion3.5:Theexist_okparameterwasadded.
Path.rmdir():Removethisdirectory.Thedirectorymustbeempty.
frompathlibimportPath p=Path(r'D:\python\pycharm2020\program\test') p.mkdir() p.rmdir()
frompathlibimportPath p=Path(r'D:\python\test1\test2\test3') p.mkdir(parents=True)#Ifparentsistrue,anymissingparentsofthispatharecreatedasneeded p.rmdir()#删除的是test3文件夹
frompathlibimportPath p=Path(r'D:\python\test1\test2\test3') p.mkdir(exist_ok=True)
- Path.unlink(missing_ok=False):Removethisfileorsymboliclink.Ifthepathpointstoadirectory,usePath.rmdir()instead.Ifmissing_okisfalse(thedefault),FileNotFoundErrorisraisedifthepathdoesnotexist.Ifmissing_okistrue,FileNotFoundErrorexceptionswillbeignored.Changedinversion3.8:Themissing_okparameterwasadded.
- Path.rename(target):Renamethisfileordirectorytothegiventarget,andreturnanewPathinstancepointingtotarget.OnUnix,iftargetexistsandisafile,itwillbereplacedsilentlyiftheuserhaspermission.targetcanbeeitherastringoranotherpathobject.
- Path.open(mode=‘r',buffering=-1,encoding=None,errors=None,newline=None):Openthefilepointedtobythepath,likethebuilt-inopen()functiondoes.
frompathlibimportPath p=Path('foo.txt') p.open(mode='w').write('sometext') target=Path('new_foo.txt') p.rename(target) content=target.open(mode='r').read() print(content) target.unlink()
2.与os模块用法的对比
总结
到此这篇关于python中pathlib模块的基本用法与总结的文章就介绍到这了,更多相关pythonpathlib模块用法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。