os.path 模块常用于对路径的处理,下面是各个方法的介绍和举例
导入模块
1import os.path
获取绝对路径
1os.path.abspath('./')
2'/home/ubuntu'
3os.path.abspath('./test')
4'/home/ubuntu/test'
需要注意的是,abspath 方法不检测路径的有效性
比如,当前目录下不存在 hxhen 这个文件夹,但并不会由此引发异常
1os.path.abspath('./hxhen')
2'/home/ubuntu/hxhen'
更多的它只是把 当前所在路径 和 参数 进行拼接
获取共同路径
1os.path.commonpath(['/home/ubuntu/test', '/home/ubuntu/Pictures'])
2'/home/ubuntu'
3os.path.commonpath(['../ubuntu/test', '../ubuntu/Pictures'])
4'../ubuntu'
参数可以是 列表(list) 类型
需要注意的是,路径之间只能都为 相对路径 或者都为 绝对路径 ,不能相对路径和绝对路径混在一起,否则报错
来一个错误示范:
1os.path.commonpath(['/home/ubuntu/test', './Pictures'])
2Traceback (most recent call last):
3 File "<stdin>", line 1, in <module>
4 File "/usr/lib/python3.6/posixpath.py", line 507, in commonpath
5 raise ValueError("Can't mix absolute and relative paths") from None
6ValueError: Can't mix absolute and relative paths
7
此外,commonpath 方法同样是不保证路径的有效性的
如, hxhen 是一个不存在的文件夹
1os.path.commonpath(['/home/ubuntu/hxhen/test', '/home/ubuntu/hxhen/Pictures'])
2'/home/ubuntu/hxhen'
判断路径是否存在
1os.path.exists('./test')
2True
3os.path.exists('./hxhen')
4False
5os.path.exists('/home/ubuntu/test')
6True
7os.path.exists('/home/ubuntu/hxhen')
8False
这个方法就见名知意了。可能要注意的是,在某些平台上会出现由于权限的关系导致路径存在却被判断为 False
替换路径中的 home 目录符号 ~
1 os.path.expanduser('~/test')
2'/home/ubuntu/test'
同样它不会检查路径的有效性
替换路径中的环境变量
1import os.path
2os.path.expandvars('$HOME/test')
3'/home/ubuntu/test'
4os.path.expandvars('$TEST')
5'/home/ubuntu/test'
这一方法不会检查路径是否有效
1os.path.expandvars('$TEST/hxhen')
2'/home/ubuntu/test/hxhen' # 实际上 hxhen 这一文件夹并不存在
获取文件的访问时间,修改时间以及文件大小
1os.path.getatime('./test/pickle.pkl') # get access time
21549807619.0545375
3os.path.getmtime('./test/pickle.pkl') # get modification time
41549466184.002119
5os.path.getsize('./test/pickle.pkl')
654
对路径属性的几个判断
- 判断是不是绝对路径
1os.path.isabs('./test')
2False
3os.path.isabs('/home/ubuntu/test')
4True
- 判断是不是一个文件
1os.path.isfile('./test/pickle.pkl')
2True
3os.path.isfile('./test/test')
4False
5#同理,它可以用来判断文件是否存在
6os.path.isfile('./test/hxhen.txt') # hxhen.txt 这个文件不存在
7False
- 判断是不是一个文件夹
1os.path.isdir('./test')
2True
3os.path.isdir('./test/test')
4True
5os.path.isdir('./test/pickle.pkl')
6False
- 判断是不是挂载点
1os.path.ismount('/media/ubuntu/DT')
2True
3os.path.ismount('/home/ubuntu')
4False
分离文件和文件拓展
虽然 Linux 不强制文件拓展名,但为了便于人眼区分,这一习惯还是应用的比较广泛
1os.path.splitext('./test/pickle.pkl')
2('./test/pickle', '.pkl')