Python的路径操作(os模块与pathlib模块)

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.os.path模块(Python 3.4版本之前推荐使用该模块)

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com from os import path p = path.join("C:\Windows","System32","drivers","etc") print(type(p),p) print(path.exists(p)) #判断路径p是否存在 print(path.split(p)) #将路径进行切分,需要注意的是,windows和Linux切分方式可能不太一样 print(path.abspath(".")) #打印当前的绝对路径 print(path.join("/",p,"hosts")) #将路径进行拼接 print(path.dirname(p)) #父目录 print(path.basename(p)) #最末层的目录 print(path.splitdrive(p)) #获取驱动器名称,该方法一般用在windows操作系统,可以一目了然的看出来某目录的驱动器名称 #以上代码输出结果如下:
<class 'str'> C:\Windows\System32\drivers\etc
True
('C:\\Windows\\System32\\drivers', 'etc')
D:\Python\project\自动化运维\yinzhengjie_devops\day007
C:\Windows\System32\drivers\etc\hosts
C:\Windows\System32\drivers
etc
('C:', '\\Windows\\System32\\drivers\\etc')
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com from os import path p1 = path.abspath(__file__) print(p1,path.basename(p1)) while p1 != path.dirname(p1):
p1 = path.dirname(p1)
print(p1,path.basename(p1)) #以上代码输出结果如下:
D:\Python\project\自动化运维\yinzhengjie_devops\day007\01.path模块.py 01.path模块.py
D:\Python\project\自动化运维\yinzhengjie_devops\day007 day007
D:\Python\project\自动化运维\yinzhengjie_devops yinzhengjie_devops
D:\Python\project\自动化运维 自动化运维
D:\Python\project project
D:\Python Python
D:\

遍历当前目录

二.pathlib模块(Python 3.4版本开始建议使用pathlib模块,提供Path对象来操作。包括目录和文件)

1>.初始化

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件
""" from pathlib import Path p1 = Path() #当前目录 p2 = Path('a','b','c\d') #当前目录下的"a\b\c\d",我是在windows下执行的代码 p3 = Path('/etc') #根下的etc目录 print("p1 = {}".format(p1))
print("p2 = {}".format(p2))
print("p3 = {}".format(p3)) #以上代码执行结果如下:
p1 = .
p2 = a\b\c\d
p3 = \etc

2>.parts和joinpath属性

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件
""" from pathlib import Path p = Path() p = p / 'a' p1 = 'b' / p p2 = Path('c') p3 = p2 / p1 print(p3.parts) #分解操作,可以返回路径中的每一个部分 p4 = p3.joinpath('etc','init.d',Path('httpd')) #连接多个字符串到Path对象中 print("p1 = {},\t p1.parts = {}".format(p1,p1.parts))
print("p2 = {},\t p2.parts = {}".format(p2,p2.parts))
print("p3 = {},\t p3.parts = {}".format(p3,p3.parts))
print("p4 = {},\t p4.parts = {}".format(p4,p4.parts)) #以上代码执行结果如下:
('c', 'b', 'a')
p1 = b\a, p1.parts = ('b', 'a')
p2 = c, p2.parts = ('c',)
p3 = c\b\a, p3.parts = ('c', 'b', 'a')
p4 = c\b\a\etc\init.d\httpd, p4.parts = ('c', 'b', 'a', 'etc', 'init.d', 'httpd')

3>.获取路径

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件
""" from pathlib import Path p1 = Path("C:\Windows\System32\drivers\etc\hosts") print(str(p1)) #获取路径字符串 print(bytes(p1)) #获取路径字符串的bytes #以上代码执行结果如下:
C:\Windows\System32\drivers\etc\hosts
b'C:\\Windows\\System32\\drivers\\etc\\hosts'

4>.父目录

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件
""" from pathlib import Path p1 = Path("C:\Windows\System32\drivers\etc\hosts") print(p1.parent.parent) #目录的逻辑父目录 for item in p1.parents: #父目录序列,索引0是直接的父目录
print(item) #以上代码执行结果如下:
C:\Windows\System32\drivers
C:\Windows\System32\drivers\etc
C:\Windows\System32\drivers
C:\Windows\System32
C:\Windows
C:\

5>.name,stem,suffix,suffixes.with_suffix(fuffix),with_name(name)

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件
""" from pathlib import Path p1 = Path("C:\Windows\System32\drivers\etc\hosts.txt") print(p1.name) #获取目录的最后一个部分
print(p1.suffix) #目录中最后一个部门的扩展名称,可以为空
print(p1.suffixes) #返回多个扩展名列表
print(p1.stem) #目录最后一个部分,没有后缀
print(p1.with_name("protocol")) #替换目录最后一个部分并返回一个新的路径 p2 = Path("C:\Windows\System32\drivers\etc\services")
print(p2.with_suffix(".txt")) #补充扩展名到路径末尾,返回新的路径,扩展名存在则无效 #以上代码执行结果如下:
hosts.txt
.txt
['.txt']
hosts
C:\Windows\System32\drivers\etc\protocol
C:\Windows\System32\drivers\etc\services.txt

6>.目录的常用方法

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件 cwd()
返回当前工作目录
home()
返回当前家目录
is_dir()
是否是目录,目录存在返回True
is_file()
是否是普通文件,文件存在返回True
is_symlink()
是否是软连接
is_socket()
是否是socket文件
is_block_device()
是否是块设备
is_char_device()
是否是字符设备
is_absolute()
是否是绝对路径
resolve()
返回一个新的路径,这个新路径就是当前Path对象的绝对路径,如果是软连接则直接被解析
absolute()
也可以获取绝对路径,但是推荐使用resolve()
exists()
目录或文件是否存在
rmdir()
删除空目录。没有提供判断目录为空的方法
touche(mode=0o666,exist_ok=True)
创建一个文件
as_uri()
将目录返回成URL,例如:"file:///etc/hosts"
mkdir(mode=0o777,partents=False,exist_ok=Flase)
parents,是否创建父目录,True等同于mkdir -p;Flase时,父目录不存在,则抛出FileNotFountError,exist_ok参数,在3.5版本加入。Flase时,路径存在,抛出FileExistsError;True时,FileExistsError被忽略。
iterdir()
迭代当前目录
""" from pathlib import Path p1 = Path() p1 /= 'a/b/c/d' p1.exists() #创建目录
# p1.mkdir() #FileNotFoundError p1.mkdir(parents=True)
p1.exists() p1.mkdir(parents=True,exist_ok=True) p1 /= "README.txt" p1.parent.rmdir() p1.parent.exists() # p1.mkdir() #FileNotFoundError p1.mkdir(parents=True) #遍历,并判断文件类型,如果是目录是否可用判断其为空
for x in p1.parents[len(p1.parents)-1].iterdir():
print(x,end='\t')
if x.is_dir():
flag = False
for _ in x.iterdir():
flag = True
break
print("dir", "Not Empty" if flag else "Empyt", sep='\t')
elif x.is_file():
print("file")
else:
print("other file")

7>.通配符

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件 glob(pattern)
通配符给定的模式
rglob(pattern)
通配符给定的模式,递归目录,返回一个生成器
""" from pathlib import Path p1 = Path("C:\Windows\System32\drivers\etc") print(list(p1.glob("host*"))) #返回当前目录对象下的以host开头的文件 print(list(p1.glob("**/*.ddl"))) #递归所有目录,等同于rglob g = p1.rglob('host*') #生成器 for _ in g:
print(next(g)) #以上代码执行结果如下:
[WindowsPath('C:/Windows/System32/drivers/etc/hosts'), WindowsPath('C:/Windows/System32/drivers/etc/hosts.dz')]
[]
C:\Windows\System32\drivers\etc\hosts.dz

8>.匹配

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件 match(pattern)
模式匹配,成功返回True
""" from pathlib import Path p1 = Path('D:\Python\project\yinzhengjie_devops\day007\01.pathlib_demo.py') print(p1.match("*.py")) print(p1.match("day007\01.pathlib_demo.py")) print(p1.match("D:\**\project\**\**\01.pathlib_demo.py")) print(p1.match("**\01.pathlib_demo.py")) print(p1.match("*\*.py")) #以上代码执行结果如下:
True
True
True
True
True

9>.stat()方法

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件
stat()
相当于stat命令
last()同stat(),但如果是符号链接,则显示符号链接本身的文本信息
""" from pathlib import Path p1 = Path("/yinzhengjie/softwares/mysql-5.7.25-linux-glibc2.12-x86_64") print(p1.stat()) p2 = Path("/yinzhengjie/softwares/mysql") print(p2.stat()) print(p2.lstat())

10>.文件操作

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com """
Python3.4版本开始,建议使用pathlib模块,提供Path对象来操作,包括目录和文件 open(self, mode='r', buffering=-1, encoding=None,errors=None, newline=None)
使用方法类似内奸函数open,返回一个文件对象。 Python3.5增加的新函数
read_bytes()
以"rb"读取路径对应文件,并返回二进制流,可通过IDE去看源码。
read_text(encoding=None,error=None)
以"rt"方式读取路径对应文件,返回文本
write_bytes(data)
以"wb"方式写入数据到路径对应文件
write_text(data,encoding=None,errors=None)
以"wt"方式写入字符串到路径对应文件。
"""
from pathlib import Path p1 = Path("my_binary_file") p1.write_bytes(b"https://www.cnblogs.com/yinzhengjie") print(p1.read_bytes()) p2 = Path("my_text_file") p2.write_text("https://www.cnblogs.com/yinzhengjie") print(p2.read_text()) with p2.open() as f:
print(f.read(5)) #以上代码执行结果如下:
b'https://www.cnblogs.com/yinzhengjie'
https://www.cnblogs.com/yinzhengjie
https

三.os模块其它常用方法

 #!/usr/bin/env python
#_*_conding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie import os,sys path = r"C:\Windows\System32\drivers\etc" print(os.name) #windows是nt,Linux是posix。 # print(os.uname()) #unix/linux系统支持 print(sys.platform) #windows显示win32,Linux显示Linux print(os.listdir(path)) #返回指定目录内容列表,不递归 p1 = path + r"\hosts"
print(os.stat(p1)) # print(os.chmod(p1,0O77)) #和Linux操作系统的chmod命令类似
# print(os.chown(p1,uid=0,gid=0)) #和Linux操作系统的chown命令类似,可以改变文件的属主,属组,但需要足够的权限 """
os模块除了上面列举的还有很多,感兴趣的小伙伴可以在这个模块里找类似需求的方法,满足我们平时的开发基本上问题不大。
对了,os模块也有open,read,write等方法,但是太底层,建议使用内建函数open,read,write,使用方法相似。
"""

Python的路径操作(os模块与pathlib模块)的更多相关文章

  1. python路径操作新标准:pathlib 模块

    之前如果要使用 python 操作文件路径,我总是会条件反射导入 os.path. 而现在,我会更加喜欢用新式的 pathlib, 虽然用得还是没有 os.path 熟练,但是以后会坚持使用. pat ...

  2. Python中路径操作

    目录 1. os.path模块 2. pathlib模块 2.1 目录操作 2.2 文件操作 3. shutil模块 3.1 os模块 3.2 shutil模块 1. os.path模块 3.4版本之 ...

  3. 路径操作OS模块和Path类(全)一篇够用!

    路径操作 路径操作模块 os模块 os属性 os.name # windows是nt, linux是posix os.uname() # *nix支持 sys.platform #sys模块的属性, ...

  4. python之文件系统操作(os模块)

    文件系统操作(os模块) import os file_name = "D:\\test_data\\1.txt" file_name_2 = "D:\\test_dat ...

  5. day18 时间:time:,日历:calendar,可以运算的时间:datatime,系统:sys, 操作系统:os,系统路径操作:os.path,跨文件夹移动文件,递归删除的思路,递归遍历打印目标路径中所有的txt文件,项目开发周期

    复习 ''' 1.跨文件夹导包 - 不用考虑包的情况下直接导入文件夹(包)下的具体模块 2.__name__: py自执行 '__main__' | py被导入执行 '模块名' 3.包:一系列模块的集 ...

  6. Python 搜索文件,文件过滤,pathlib模块

    1,搜索文件,文件过滤 这里使用:pathlib 模块的  Path.glob(pattern)  方法,该方法可以用来过滤目标文件,以迭代器的形式返回搜索结果. pattern: 通配符:" ...

  7. python(3):文件操作/os库

      文件基本操作 r,以读模式打开,  r+=r+w, w, 写模式(清空原来的内容), w+=w+r, a , 追加模式, a+=a+r, rb, wb, ab, b表示以二进制文件打开 想在一段文 ...

  8. Python文件路径操作

    print(os.environ.get('HOME')) # 打印`HOME`这个环境变量 /Users/<> file_path = os.environ.get('HOME') + ...

  9. Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块

    StringIO StringIO操作 BytesIO BytesIO操作 file-like对象 路径操作 路径操作模块 3.4版本之前:os.path模块 3.4版本开始 建议使用pathlib模 ...

随机推荐

  1. SVM – 线性分类器

    感知机 要理解svm,首先要先讲一下感知机(Perceptron),感知机是线性分类器,他的目标就是通过寻找超平面实现对样本的分类:对于二维世界,就是找到一条线,三维世界就是找到一个面,多维世界就是要 ...

  2. bat文件重命名指定路径下文件

    ren "E:\产品\Planning\C1-Planning11\C1-Planning11\target\123" 456 此命令是将文件123重命名为456 注意:456是文 ...

  3. java导出pdf功能记录

    这几天已在做处理导出pdf文件的功能,摸索了几天总算可以了.记录下这几天遇到的问题. 1.网上基本都是基于Itext5和Itext7来处理的.我最终是在Itext5上成功了,itext7应该是模板出问 ...

  4. sql server 2008 自动备份

    身份验证:包含Windows身份验证和 SQL Server身份验证,此处选择Windows 身份验证; 选择[管理]-->[维护计划]-->[维护计划向导] 必须启用代理服务(启动模式请 ...

  5. docker添加mongo4.0.3并配置复制集

    1.创建docker 具体略过 自行百度 2.创建数据持久化目录文件(/data/mongo0是个例子 命名随意)  拉取mongo docker pull mongo:4.0.3 3.启动容器 do ...

  6. 【Python】解决使用pyinstaller打包Tkinker程序报错问题

    问题描述 使用pyinstaller打包使用Tkinter编写的控制台程序,出现报错 15793 INFO: Adding Microsoft.Windows.Common-Controls to d ...

  7. docker安装ES,Kibana

    docker安装ES 1.docker pull elasticsearch:6.8.2 2.docker run -it --name elasticsearch   -d -p 9200:9200 ...

  8. JVM内存调优原则及几种JVM内存调优方法

      转载,如需帮助,请联系wlgchun@163.com https://blog.csdn.net/LeegooWang/article/details/88696195 如何对JVM进行内存调优? ...

  9. 手撕面试官系列(四 ):MongoDB+Redis 面试专题

    MongoDB   (面试题+答案领取方式见侧边栏) 你说的 NoSQL 数据库是什么意思?NoSQL 与 RDBMS 直接有什么区别?为什么要使用和不使用NoSQL 数据库?说一说 NoSQL 数据 ...

  10. vps建站施工预告

    作为一个小白,最近几天自己用vps搭了个站点,用来发发博客,偶尔还可以去外面看看.后面几章就来记一下过程吧! 结构极为简单,建站用的WordPress,目前也就只有最基础的发文章功能.不过由于习惯了m ...