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中路径操作的更多相关文章

  1. Python的路径操作(os模块与pathlib模块)

    Python的路径操作(os模块与pathlib模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.os.path模块(Python 3.4版本之前推荐使用该模块) #!/u ...

  2. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  3. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  4. Neo4j:图数据库GraphDB(四)Python中的操作

    本文总结下Python中如何操作Neo4j数据库,用到py2neo包,Pip install 一下. 1 连接neo4j数据库:跟其它数据库一样,操作前必须输入用户名和密码及地址连接一下. from ...

  5. python MySQLdb用法,python中cursor操作数据库(转)

    数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_N ...

  6. python中文件操作的基本方法

    在python中对一个文件进行操作,分为三大步:打开,操作,关闭 首先创建一个文件hello,里面内容为hello world 一.打开一个文件 1.#open(‘文件名或文件路径’,‘操作模式’,文 ...

  7. Python 中文件操作

    上代码: import os import os.path rootdir = "d:/code/su/data" # 指明被遍历的文件夹 for parent,dirnames, ...

  8. python中selenium操作下拉滚动条方法汇总

    UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了. 比如下面这样一个网页 ...

  9. Python中字符串操作函数string.split('str1')和string.join(ls)

    Python中的字符串操作函数split 和 join能够实现字符串和列表之间的简单转换, 使用 .split()可以将字符串中特定部分以多个字符的形式,存储成列表 def split(self, * ...

随机推荐

  1. Connection reset by peer的常见原因

    1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer). Socket默认连接60秒 ...

  2. 一步一步理解 python web 框架,才不会从入门到放弃

    要想清楚地理解 python web 框架,首先要清楚浏览器访问服务器的过程. 用户通过浏览器浏览网站的过程: 用户浏览器(socket客户端) 3. 客户端往服务端发消息 6. 客户端接收消息 7. ...

  3. 【UOJ】67 新年的毒瘤 &【BZOJ】1123 BLO

    [UOJ 67] 题目链接: 传送门 题解: 第一眼很懵逼……这什么鬼. 思考什么点复合条件……(o(>﹏<)o 1.树,也就是说还剩n-2条边,等价于要删去一个度数为m-n+2的点. 2 ...

  4. JSON 数据重复 出现$ref

    JSONArray  类型  如果我们往里面add数据的时候 如果数据相同,那么就会被替换成 $ref:   也就是被简化了 因为数据一样所直接 指向上一条数据 循环引用:当一个对象包含另一个对象时, ...

  5. 机器学习web服务化实战:一次吐血的服务化之路

    背景 在公司内部,我负责帮助研究院的小伙伴搭建机器学习web服务,研究院的小伙伴提供一个机器学习本地接口,我负责提供一个对外服务的HTTP接口. 说起人工智能和机器学习,python是最擅长的,其以开 ...

  6. MIP 内容声明

    从搜索结果页点出的 MIP 页面,其页面上的任何内容(包括但不限于广告.在线咨询.统计等组件)均视为在原站点上的投放和使用. MIP (Mobile Instant Pages - 移动网页加速器), ...

  7. 【ODI】| 数据ETL:从零开始使用Oracle ODI完成数据集成(二)

    前一节已经完成了Oracle数据库和ODI的安装,并已经为ODI在Oracle数据库中创建了两个用户,分别用于存放主资料库数据和工作资料库数据,在ODI中完成主资料库和工作资料库的创建,也分别为其创建 ...

  8. Vue.js组件间通信方式总结

    平时在使用Vue框架的业务开发中,组件不仅仅要把模板的内容进行复用,更重要的是组件之间要进行通信.组件之间通信分为三种:父-子:子-父:跨级组件通信.下面,就组件间如何通信做一些总结. 1.父组件到子 ...

  9. SpringBoot从零单排 ------初级入门篇

    有人说SSM已死,未来是SpringBoot和SpringCloud的天下,这个观点可能有点极端,但不可否认的是已经越来越多的公司开始使用SpringBoot.所以我将平时学习SpringBoot的内 ...

  10. 非常贴心的轮子 FreeSql

    FreeSql 项目从2018年11月28日开发至今,版本已发布至 v0.3.12,版本规则:年数-月-日-当日版本号.目前主要包括 FreeSql.FreeSql.Repository 两个项目的维 ...