python常用地方记录
1.绝对路径
python3.4出的新功能:pathlib—面向对象的文件系统路径
拉到页面最下面可以看到与os.path映射的相同功能。
原先获取命令目录与工作目录需要导入os与sys俩模块,现在统一到pathlib.Path下;
不知道还有其他表达方式么,没有的话以后尽量用pathlib模块处理文件路径及目录问题了。
最基础常用的当前文件所在绝对路径,而非当前工作路径,应当予以区别:
import os
import sys
cwd = os.getcwd() # 当前工作目录
print(cwd)
FILE_PATH = sys.path[0] # 当前文件目录
print(FILE_PATH)
from pathlib import * # 导入pathlib的所有子包
cwd = Path.cwd() # 当前工作目录
print(cwd)
WF = Path(__file__) # 当前文件
WD = WF.resolve().parent # 当前文件所在目录(当前文件绝对路径的上级目录)
print(WD)
测试效果:
[root@ansible-server script]# python3 dir_test.py
/opt/datax/script
/opt/datax/script
/opt/datax/script
/opt/datax/script
[root@ansible-server script]# cd ..
[root@ansible-server datax]# python3 script/dir_test.py
/opt/datax
/opt/datax/script
/opt/datax
/opt/datax/script
Path的文件操作
参考1: Python pathlib模块用法详解 这个基本上对官方文档的翻译
参考1: 路径处理库pathlib使用详解 这位讲了比较全面的用法清单
pathlib初期使用的时候,容易遇到很多关于PurePosixPath对象的问题,原因无非是其影响了旧的写法:
from pathlib import * # 导入pathlib的所有子包
WF = Path(__file__) # 当前文件 dir_test.py
WD = WF.resolve() # 当前文件 /opt/datax/script/dir_test.py
WD = WF.resolve().parent # 当前文件所在目录(当前文件绝对路径的上级目录) /opt/datax/script/
logfile = Path(WD.parent).joinpath('log', 'test.log') # 路径拼接 /opt/datax/log/test.log
# PurePath 代表并不访问实际文件系统的“纯路径”。简单来说,PurePath 只是负责对路径字符串执行操作,至于该字符串是否对应实际的路径,它并不关心。PurePath 有两个子类,即 PurePosixPath 和 PureWindowsPath,分别代表 UNIX 风格的路径(包括 Mac OS X)和 Windows 风格的路径。
# Path 代表访问实际文件系统的“真正路径”。Path 对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。Path 同样有两个子类,即 PosixPath 和 WindowsPath。
# 假设这里我要打开一个logfile文件
with logfile.open(encoding="utf-8") as log:
...
# 如果要用到路径的字符串格式【我暂时使用str()方法转换的】
str(logfile)