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. chrome 报错 ERR_CERT_AUTHORITY_INVALID

    场景: 本地调试https/wss程序,使用了openssl自签名的证书,解决方法:添加到信任证书 根据以下图片流程操作 然后 打开selfsigned.cer 清空该网站缓存 参考资料: https ...

  2. 一款新的好用的SSH工具——FinalShell

    FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿 ...

  3. c# socket 心跳 重连

    /// <summary> /// 检查一个Socket是否可连接 /// </summary> /// <param name="socket"&g ...

  4. keystone源码阅读--python函数

    按照setup.sfg文件中[entry_poubts]中的声明前后阅读: 1.cmd.manage:main os.path.join(path,name):连接目录与文件名或目录os.path.e ...

  5. java + selenium + testng实现简单的UI自动化

    新建Maven项目,添加需要的依赖 1.新建一个Maven项目 2.在pom.xml中添加需要的依赖,这里只要selenium和testng就行 <!-- https://mvnreposito ...

  6. 文件和异常的练习3——python编程从入门到实践

    10-10 常见单词:访问项目Gutenberg(http://gutenberg.org/),并找一些你想分析的图书.下载这些作品的文本文件或将浏览器中的原始文本复制到文本文件中. 可以使用coun ...

  7. python学习-31 内置函数

    内置函数 1.abs()  绝对值 2.all()    判断列表里的所有值的布尔值(如果迭代列表里的每个值后都是True 则返回True) '])) 运行结果: True Process finis ...

  8. ZYNQ笔记(1):PL端——led灯

    ZYNQ分为PS和PL,此博客实际上是FPGA中一个完整的FPGA工程的创建. PS:处理系统 (Processing System) 即ARM的Soc部分 PL:可编程逻辑(Programable ...

  9. GridControl单元格编辑验证的方法

    本文实例演示了DevExpress实现GridControl单元格编辑验证的方法,比较实用的功能,具体方法如下: 主要功能代码如下: /// <summary> /// 自定义单元格验证 ...

  10. JavaScript 的 深拷贝和浅拷贝

    深拷贝和浅拷贝都是针对的引用类型, JS中的变量类型分为值类型(基本类型)和引用类型: 对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会对地址进行拷贝,最终两个变量指向同一份数据 一.先 ...