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. (原)关于音频onset detection算法的阅读

    Orgin:Using Audio Onset Detection Algorithms 本文档只记录了部分的内容,主要以aubio相关内容为主,并非整个文档的完整内容,记录人:lihaiping16 ...

  2. matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

    一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...

  3. SSAS 项目部署失败的问题

    在创建SSAS项目过程中,创建数据源.数据源视图.多维数据集.纬度等一切都没有问题.但是在“进程”这一步的时候,发现总是报错,提示如下.OLE DB 错误: OLE DB 或 ODBC 错误 : 用户 ...

  4. jquery checkbox全选和取消

    $("#allcheck").click(function(){ var allcheck=$('#allcheck').is(':checked'); $.each($(&quo ...

  5. 共享和独享IP的VPS的区别?

    共享IP的VPS主机: 顾名思义,共享IP的VPS主机的最大特性即是若干VPS主机用户共享同一个公网IP地址,此目的显然是节省有限的IP地址资源,有效应对Ipv4枯竭的问题.其基本原理是,所有VPS主 ...

  6. Prometheus监控教程——从入门到放弃

    Prometheus的安装还是比较简单的 下载地址如下 https://prometheus.io/download/ 解压,修改配置,运行.默认监听9090端口 [root@localhost ~] ...

  7. WEBSHELL-恶意代码检测

    静态查杀 提取特征写成规则库,调用规则库查杀.基于规则,会比较快,但漏报.误报会比较明显,一般的Webshell一句话木马变形混淆会比较多. yara规则 $eval = /(<\?php|[; ...

  8. SpringMVC中css,js,图片等静态资源被拦截的解决办法

    一.静态资源的存放路径 css,js,图片等静态资源存放在项目的路径必须为 二.html.jsp导入静态资源文件 html.jsp页面中的导入静态资源文件: js: css: 图片: 二.web.xm ...

  9. 以A表中的值快速更新B表中记录的方法

    1.问题描述 有两张表,A表记录了某些实体的新属性,B表记录了每个实体的旧属性,现在打算用A中的属性值去更新B中相同实体的旧属性,如下图所示: 类似这样的需求,怎样做比较高效呢? 2.制作模拟数据   ...

  10. Docker 容器内无法通过 HTTP 访问外网

    现象 内/外网 IP 和 域名 可以 ping 通 容器内无法访问宿主机所在内网及外网的 Web 服务(404) 通过 curl 查看返回头信息感觉是所有 Web 请求被中转到一个固定的 Nginx ...