Python中路径操作
1. os.path模块
3.4版本之前使用os.path模块,3.4版本之后建议使用pathlib模块
| 方法 | 解释 |
|---|---|
| path.join | 拼接一个路径出来 |
| path.exists | 判断该路径是否存在 |
| path.split | 将路径切割成头和尾的一个元组 |
| path.abspath | 返回一个绝对路径 |
| path.dirname | 返回‘目录’ |
| path.basename | 返回路径的最后一部分 |
>>> from os import path
>>> p = path.join('/usr','local/httpd/httpd.conf')
>>> p
'/usr/local/httpd/httpd.conf'
>>> type(p)
<class 'str'>
>>> path.dirname(p)
'/usr/local/httpd'
>>> path.basename(p)
'httpd.conf'
>>> path.split(p)
('/usr/local/httpd', 'httpd.conf')
>>> p
'/etc/local/http/httpd.conf'
>>> while p != path.dirname(p):
... p = path.dirname(p)
... print(p,path.basename(p))
...
/etc/local/http http
/etc/local local
/etc etc
/
2. pathlib模块
from pathlib import Path
Path中返回的是一个Path对象,而os.path中返回的是一个字符串。
2.1 目录操作
初始化:
>>> p = Path() # 当前目录
>>> p = Path('a','b','c/d') # 当前目录下的a/b/c/d
>>> p = Path('/etc') # 根下的etc目录
| 属性 | 解释 |
|---|---|
| parts | 返回路径中的每一个部分 |
| joinpath | 连接多个字符串到Path对象中 |
| parent | 目录的逻辑父目录 |
| parents | 父目录序列,索引0是直接的父 |
| name | 目录中的最后一部分 |
| suffix | 目录中的最后一部分的扩展名 |
| stem | 目录的最后一个部分,没有后缀 |
| suffixes | 返回多个扩展名列表 |
| with_suffix(suffix) | 补充扩展名到路径的尾部,返回新的路径,扩展名存在则无效 |
| with_name(name) | 替换目录最后一个部分并返回一个新的路径 |
>>> p = Path('/usr/local/httpd/httpd.conf')
>>> p.name
'httpd.conf'
>>> p.stem
'httpd'
>>> p.suffix
'.conf'
>>> p.with_name('httpd.txt')
PosixPath('/usr/local/httpd/httpd.txt')
| 属性 | 解释 |
|---|---|
| cwd() | 返回当前工作目录 |
| home() | 返回当前家目录 |
| is_dir() | 是否是目录 |
| is_file() | 是否是普通文件 |
| is_symlink() | 是否是软链接 |
| is_socket() | 是否是socket文件 |
| is_block_device() | 是否是块设备 |
| is_absolute() | 是否是绝对路径 |
| resolve() | 返回一个新的路径,该路径是当前Path的绝对路径,如果是软连接则被解析 |
| absolute() | 获取绝对路径,推荐使用resolve() |
| exists() | 目录或者文件是否存在 |
| rmdir() | 删除空目录,没有提供判断目录为空的方法 |
| touch() | 创建一个文件 |
| as_uri() | 将路径解析成url |
| mkdir() | 创建目录 |
判断目录:
>>> Path.cwd()
PosixPath('/home/yanfa')
>>> Path.home()
PosixPath('/home/yanfa')
>>> p = Path('/home/yanfa')
>>> p
PosixPath('/home/yanfa')
>>> p.is_dir()
True
>>> p.is_file()
False
>>> p.is_absolute()
True
创建目录:
>>> p = Path()
>>> p /= 'a/b/c/d'
>>> p.exists()
False
>>> p.mkdir() # FileNotFoundError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3.6/lib/python3.6/pathlib.py", line 1248, in mkdir
self._accessor.mkdir(self, mode)
File "/usr/local/python3.6/lib/python3.6/pathlib.py", line 387, in wrapped
return strfunc(str(pathobj), *args)
FileNotFoundError: [Errno 2] No such file or directory: 'a/b/c/d'
>>> p.mkdir(parents=True)
>>> p.exists()
True
通配符匹配:
- glob(pattern) 匹配给定的模式
- rglob(pattern) 匹配给定的模式,递归目录,返回一个生成器
- match(pattern) 模式匹配,成功返回True
>>> p = Path()
>>> list(p.glob('h*'))
[PosixPath('h'), PosixPath('hello')]
>>> list(p.glob('**/*.py'))
[PosixPath('pass_py.py')]
>>> g = p.rglob('*.py')
>>> next(g)
PosixPath('pass_py.py')
>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> p = Path('a/b/c/d')
>>> p = Path('a/b/c/ddd.py')
>>> p.match('d*.py')
True
>>> p.match('c/d*.py')
True
>>> p.match('b/*/d*.py')
True
查看文件或者目录属性信息
- stat() 如同linux里面的stat命令
- lstst() 同stat(),但是如果是符号链接,就显示链接本身的信息
2.2 文件操作
open(mode='r', buffering=-1, encoding=None, errors=None, newline=None如何内建的open,返回一个文件对象。- read_bytes() 以'rb'读取路径中对应的文件,并返回二进制流。
- read_text() 以'rt'读取路径中对应的文件,并返回文本。
- write_bytes(date) 以‘wb’方式写入数据到路径对应文件。
- write_text(data) 以‘wt’方式写入数据到路径对应的文件。
>>> from pathlib import Path
>>> p = Path('hello')
>>> p.write_text('hello python')
12
>>> p.read_text()
'hello python'
>>> with p.open() as f:
... print(f.read())
...
hello python
3. shutil模块
3.1 os模块
- os.name 返回操作系统
- os.uname() 显示当前操作系统的详细信息
- sys.platform 返回当前操作系统
- os.listdir() 返回目录内容的列表
- os.stat() 如何stat
- os.chmod() 修改文件的权限
- os.chown() 改变文件的属主,属组
3.2 shutil模块
shutil模块提供了对文件的高级操作,特别是针对文件的复制和移动。
- copyfileobj(fsrc, fdst[, length]) 文件对象的复制,复制内容。
- copyfile(src, dst, *, follow_symlinks=True) 复制文件内容,不含元数据
- copymode() 仅仅复制权限
- copystat() 复制元数据,stat包含权限
- copy() 复制文件内容、权限和部分元数据,不包括创建时间和修改时间
- rmtree() 递归删除,同
rm -rf一样 - move(src,dst,copy_function=copy2) 递归移动文件,目录到目录路径。
Python中路径操作的更多相关文章
- Python的路径操作(os模块与pathlib模块)
Python的路径操作(os模块与pathlib模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.os.path模块(Python 3.4版本之前推荐使用该模块) #!/u ...
- python中文件操作的六种模式及对文件某一行进行修改的方法
一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...
- python中文件操作的其他方法
前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...
- Neo4j:图数据库GraphDB(四)Python中的操作
本文总结下Python中如何操作Neo4j数据库,用到py2neo包,Pip install 一下. 1 连接neo4j数据库:跟其它数据库一样,操作前必须输入用户名和密码及地址连接一下. from ...
- python MySQLdb用法,python中cursor操作数据库(转)
数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_N ...
- python中文件操作的基本方法
在python中对一个文件进行操作,分为三大步:打开,操作,关闭 首先创建一个文件hello,里面内容为hello world 一.打开一个文件 1.#open(‘文件名或文件路径’,‘操作模式’,文 ...
- Python 中文件操作
上代码: import os import os.path rootdir = "d:/code/su/data" # 指明被遍历的文件夹 for parent,dirnames, ...
- python中selenium操作下拉滚动条方法汇总
UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了. 比如下面这样一个网页 ...
- Python中字符串操作函数string.split('str1')和string.join(ls)
Python中的字符串操作函数split 和 join能够实现字符串和列表之间的简单转换, 使用 .split()可以将字符串中特定部分以多个字符的形式,存储成列表 def split(self, * ...
随机推荐
- nodejs中处理回调函数的异常
如果是使用nodejs+express3这个经典的组合,那么有一种很方面的处理回调函数异常的方法: 1. 安装模块:express-domain-middleware 2. 加入如下的代码: app. ...
- Tornado框架实现图形验证码功能
图形验证码是项目开发过程中经常遇到的一个功能,在很多语言中都有对应的不同形式的图形验证码功能的封装,python 中同样也有类似的封装操作,通过绘制生成一个指定的图形数据,让前端HTML页面通过链接获 ...
- 他学习一年Python找不到工作,大佬都说你别再学Python了!
引言: 都说,滴水穿石非一日之功.然而有些人即使奋斗一辈子也比不上别人一年,别人学习一年比不得你学习一个月.其中缘由,有些人看了大半辈子还没看明白. 即使Python这么火,为何你学习一年的Pytho ...
- 关于Kafka配额的讨论(2)
继续前一篇的讨论.前文中提到了两大类配额管理:基于带宽的以及基于CPU线程使用时间的.本文着重探讨基于CPU线程时间的配额管理. 定义 这类配额管理被称为请求配额(request quota),管理起 ...
- java编程思想-第五章-某些练习题
参考https://blog.csdn.net/caroline_wendy/article/details/46844651 10&11 finalize()被调用的条件 Java1.6以下 ...
- 关于linux下部署JavaWeb项目,nginx负责静态资源访问,tomcat负责处理动态请求的nginx配置
1.项目的运行环境 linux版本 [root@localhost ~]# cat /proc/version Linux version -.el6.x86_64 (mockbuild@x86-.b ...
- Oracle系列-锁表与解锁解决方案(大招版)-解决问题才是王道
[Oracle系列-锁表与解锁解决方案(大招版)] --1查看被锁的表 select b.owner,b.object_name,a.session_id,a.locked_mode from v$l ...
- Ubuntu 17.10 UTC
UTC即Universal Time Coordinated,协调世界时(世界统一时间)GMT 即Greenwich Mean Time,格林尼治平时Windows 与 Mac/Linux 看待系统硬 ...
- 监督学习——logistic进行二分类(python)
线性回归及sgd/bgd的介绍: 监督学习--随机梯度下降算法(sgd)和批梯度下降算法(bgd) 训练数据形式: (第一列代表x1,第二列代表 x2,第三列代表 数据标签 用 0/ ...
- python 安装cv2
问题描述:import cv2 报错提示未安装此包. 解决措施: 1.cmd框中输入pip install cv2,若安装成功,则恭喜你一次性成功,如提示"无法找到与你当前版本的匹配&quo ...