Python的路径操作(os模块与pathlib模块)
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模块)的更多相关文章
- python路径操作新标准:pathlib 模块
之前如果要使用 python 操作文件路径,我总是会条件反射导入 os.path. 而现在,我会更加喜欢用新式的 pathlib, 虽然用得还是没有 os.path 熟练,但是以后会坚持使用. pat ...
- Python中路径操作
目录 1. os.path模块 2. pathlib模块 2.1 目录操作 2.2 文件操作 3. shutil模块 3.1 os模块 3.2 shutil模块 1. os.path模块 3.4版本之 ...
- 路径操作OS模块和Path类(全)一篇够用!
路径操作 路径操作模块 os模块 os属性 os.name # windows是nt, linux是posix os.uname() # *nix支持 sys.platform #sys模块的属性, ...
- python之文件系统操作(os模块)
文件系统操作(os模块) import os file_name = "D:\\test_data\\1.txt" file_name_2 = "D:\\test_dat ...
- day18 时间:time:,日历:calendar,可以运算的时间:datatime,系统:sys, 操作系统:os,系统路径操作:os.path,跨文件夹移动文件,递归删除的思路,递归遍历打印目标路径中所有的txt文件,项目开发周期
复习 ''' 1.跨文件夹导包 - 不用考虑包的情况下直接导入文件夹(包)下的具体模块 2.__name__: py自执行 '__main__' | py被导入执行 '模块名' 3.包:一系列模块的集 ...
- Python 搜索文件,文件过滤,pathlib模块
1,搜索文件,文件过滤 这里使用:pathlib 模块的 Path.glob(pattern) 方法,该方法可以用来过滤目标文件,以迭代器的形式返回搜索结果. pattern: 通配符:" ...
- python(3):文件操作/os库
文件基本操作 r,以读模式打开, r+=r+w, w, 写模式(清空原来的内容), w+=w+r, a , 追加模式, a+=a+r, rb, wb, ab, b表示以二进制文件打开 想在一段文 ...
- Python文件路径操作
print(os.environ.get('HOME')) # 打印`HOME`这个环境变量 /Users/<> file_path = os.environ.get('HOME') + ...
- Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块
StringIO StringIO操作 BytesIO BytesIO操作 file-like对象 路径操作 路径操作模块 3.4版本之前:os.path模块 3.4版本开始 建议使用pathlib模 ...
随机推荐
- Elasticsearch学习之集群常见状况处理(干货)
1. 集群健康状况处理 当集群处于yellow或者red状态的时候,整体处理步骤如下: (1) 首先查看集群状态 localhost:/_cluster/health?pretty { "c ...
- 快速读取TXT几百万行数据, 然后插入到数据,SqlBulkCopy功能的确是有效率
public static void Main(string[] args) { string strPath = "F:\\Download\\600.txt"; int lin ...
- dubbo 报错问题记录:may be version or group mismatch
凌晨时候钉钉告警群里一直大量报错: 接口异常报警:项目:mp-rest,域名:inside-mp.01zhuanche.com,IP:10.30.3.60,接口地址:/api/v3/driverLog ...
- 小程序onShow
/** * 生命周期函数--监听页面加载 */ onLoad: function(options) { let that = this; const openid = app.globalData.o ...
- 嵌入式02 STM32 实验10 定时器中断
优秀文章 https://blog.csdn.net/qq_38351824/article/details/82619734 一.STM32通用定时器(TIM2.TIM3.TIM4和TIM5共四个通 ...
- LeetCode第154场周赛(Java)
估计要刷很久才能突破三道题了.还是刷的太少.尽管对了前两题,但是我觉得写的不怎么样.还是将所有题目都写一下吧. 5189. "气球" 的最大数量 题目比较简单.就是找出一个字符串中 ...
- C语言函数返回指针方法
1.将函数内部定义的变量用static修饰 由于static修饰的变量,分配在静态内存区(类似于全局变量区),函数返回时,并不会释放内存,因此可以将要返回的变量加static修饰. int *test ...
- Go语言【数据结构】字符串
字符串 简介 一个字符串是一个不可改变的字节序列,字符串通常是用来包含人类可读的文本数据.和数组不同的是,字符串的元素不可修改,是一个只读的字节数组.每个字符串的长度虽然也是固定的,但是字符串的长度并 ...
- python_dict json读写文件
命令汇总: json.dumps(obj) 将python数据转化为json Indent实现缩进,ensure_ascii 是否用ascii解析 json.loads(s) 将json数据转换为py ...
- Git diff (---和+++具体解释)(转)
转自:https://blog.csdn.net/lovezbs/article/details/46492933