python pathlib.Path
对象在append模式下是否有write_text()
的快捷方式?
标准的open()
函数有mode="a"
打开一个文件,如果该文件存在,则写入并附加到该文件,Path
的.open()
函数似乎具有相同的功能(my_path.open("a")
)。
但是方便的.write_text('..')
快捷方式怎么样呢?有没有一种方法可以使用pathlib
打开并附加到一个文件中,只需做与open()
相同的事情?
为了清楚起见我可以
with my_path.open('a') as fp:
fp.write('my text')
但还有别的办法吗my_path.write_text('my text', mode='a')
6条答案
按热度按时间cyej8jka1#
不完全是这样,正如您在pathlib模块中看到的,存在两种类型的路径类:
*纯路径类{纯路径、纯PosixPath、纯Windows路径}
*具体路径类{路径、PosixPath、Windows路径}。
这些类构造函数的参数将仅为
*pathsegments
。如果查看可用的读/写方法(read_text/read_bytes和write_text/write_bytes),您还会看到mode也不可用
因此,正如您已经发现的,将mode与这些pathlib类一起使用的唯一方法是使用
open
方法,即:这是设计好的,这样pathlib类就变得非常“干净”了。另外,上面的代码片段已经是规范的了,所以不能再简化了。不过,你可以在上下文管理器之外使用
open
方法:sg3maiej2#
pathlib
方法Path().write_text()
和Path().write_bytes()
在退出时关闭文件连接。使用附加模式,即
open('a', ...)
将示例化TextIOWrapper
,该TextIOWrapper
在退出时也由write_text
/write_bytes
关闭。否则必须手动关闭
但可以是这样的:
insrf1ej3#
write_text
没有“append mode”,也没有相应的append_text
方法,如果需要,可以自己编写一个函数:你可能会奇怪为什么不把这样的东西作为方法直接内置到
pathlib
中,一个原因是因为它很容易实现,所以不值得添加,但显然这不是全部,因为read_text
和write_text
同样很容易实现。我认为
pathlib.Path
对象没有(实际上也不应该)append_text
方法的一个主要原因是,它为没有经验的用户创造了一个漏洞,这是API设计中的一个巨大罪过。具体来说,我所指的漏洞是在同一个文件上循环重复使用
append_text
。因为你不断地打开和关闭文件,所以它是慢。另外,做这么多不必要的写入可能对你的硬盘健康不利。更糟糕的是,因为程序实际上会正确运行(例如,文件将包含他们想要的内容),他们甚至可能不会注意到任何错误,因为他们不一定有一个心理测量,写一个文件“应该”花多长时间。
这正是一个天真的程序员会写的代码:
6yt4nkrj4#
fdx2calv5#
如果使用WITH结构太麻烦,这可能会提供一种解决方法:
9njqaruj6#
创建一个函数并绑定到
pathlib.Path
创建新路径对象
写入模式
追加模式