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

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.待添加

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值