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, * ...
随机推荐
- python assert的作用
使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...
- Python内置方法中不明了的部分
# 把字符串转成一个对象 TODO 这个方法到底怎么用? repr('please') # 切片 TODO 怎么用? d = range(20) d[slice(2,5)] # 返回range[2,5 ...
- 如何解决-win7系统打开截图工具显示“截图工具当前未在计算机上运行”
打开win7系统自带截图工具,显示"截图工具当前未在计算机上运行.请重新启动计算机,然后重试", 解决方法 1.首先在C盘中搜索tpcps.dll: 2.将数据最大那个tpcp ...
- laravel 分页和共多少条 加参数的分页链接
<div class="pagers "> <span class="fs pager">共 {{$trades->total() ...
- ArcGIS API for JavaScript 入门教程[2] 授人以渔
这篇仍然不讲怎么做,但是我要告诉你如何获取资源. 目录:https://www.cnblogs.com/onsummer/p/9080204.html 转载注明出处,博客园/CSDN/B站:秋意正寒. ...
- Java NIO 概览
Java面试通关手册(Java学习指南) Github地址:https://github.com/Snailclimb/Java_Guide 一 NIO简介 Java NIO 是 java 1.4 之 ...
- java Dated Dateformat Calendar
Date类概述 类Date表示特定的瞬间,精确到毫秒.1000毫秒=1秒 时间的原点:公元1970年 一月一日,午夜0:00:00 对应的毫秒值就是0 注意:时间和日期的计算,必须依赖毫秒值 long ...
- TF.learn学习
官网地址:https://www.tensorflow.org/versions/r1.1/get_started/tflearn 1.代码例子 实现自定义的Estimator 使用DNNClassi ...
- 如何在招聘中考核.NET架构师
.NET架构师招聘不如JAVA那么顺利,可以搜索到的.NET架构师可以说是凤毛菱角.当然好的架构师都是需要长期观察和挖角才能得手,如何去招聘到合适的.NET架构师可能是摆在所有求贤者面前的难题.这里的 ...
- .NET Core微服务系列基础文章索引(目录导航Final版)
一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...