AttributeError: 'PurePosixPath' object has no attribute 'open'

柔情痞子 提交于 2019-12-19 12:04:32

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)

2.待添加

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!