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, * ...
随机推荐
- 2. 网友对app后端写作系列文章的写作建议
很感谢"app后端"qq群的网友,在发布消息后,就收到了大量网友的反馈 下面的建议会融入到写作当中: 1.还有,对版本升级很感兴趣,我们现在为了兼容旧版本,已经把工程代码搞的乱哄哄 ...
- 1. 开篇-springboot环境搭建
最初学习strurs2时,虽然觉得也挺好用的,但也有一些不便的地方:1. 模型绑定必须要在Action中声明对应模型的成员变量:2. Action中对外提供调用的接口必须明确注明:3. 要声明一大堆的 ...
- Java API获取topic所占磁盘空间(Kafka 1.0.0)
很多用户都有这样的需求:实时监控某个topic各分区在broker上所占的磁盘空间大小总和.Kafka并没有提供直接的脚本工具用于统计这些数据. 如果依然要实现这个需求,一种方法是通过监控JMX指标得 ...
- BootStrapTable获取选中数据值并传参至父页面
如何实现以下效果呢? 首先,我们先要了解一下BootStrapTable如何获取选中数据的具体值. 如下图所示,怎样选择任意一行,获取其中的数据 一.首先想要选择任意一行,就得必须先有选择框,选择框是 ...
- Protostuff序列化分析
前言最近项目中需要将业务对象直接序列化,然后存数据库:考虑到序列化.反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文 ...
- Go 1.9 sync.Map揭秘
Go 1.9 sync.Map揭秘 目录 [−] 有并发问题的map Go 1.9之前的解决方案 sync.Map Load Store Delete Range sync.Map的性能 其它 在Go ...
- []T 还是 []*T, 这是一个问题
全面分析Go语言中的类型和类型指针的抉择 目录 [−] 副本的创建 T的副本创建 *T的副本创建 如何选择 T 和 *T 什么时候发生副本创建 最常见的case map.slice和数组 for-ra ...
- election.go
package)) ].GetResponseRange().Kvs[] ) ].Value),] } wch := client.Watch(cctx, string ...
- bzoj 2002 弹飞绵羊 分块
正解lct,然而本蒟蒻并不会.... 分块思路很清晰,处理出每个点弹出所在块所需要的步数及出去后的第一个位置 #include<cstdio> #include<cstring> ...
- C++的代理类
怎样在一个容器中包含类型不同,但是彼此有关系的对象?众所周知,C++的容器只能存放类型相同的元素,所以直接在一个容器中存储不同类型的对象本身是不可能的,只能通过以下两种方案实现: 1. 提供一个间接层 ...