Python 附加模式下的路径库路径“写入文本”
pythonPython 附加模式下的路径库路径“写入文本”,python,python-3.x,pathlib,Python,Python 3.x,Pathlib,pythonpathlib.Path对象在append模式下写入write_text()是否有快捷方式 标准函数有mode=“a”打开一个文件,以便在文件存在时写入并附加到该文件,而Paths函数似乎具有相同的功能(my_Path.open(“a”)) 但是方便的.write_text(“..”)快捷方式呢,有没有一种方法可以使用pathlib打开并附加到一个文件,只需执行与open()相同的操作 为了清楚起见,我可以这样做 以我的路径打开('a')作为fp的: fp.write(‘我的文本’)
pathlib.Path
对象在append模式下写入write_text()
是否有快捷方式
标准函数有mode=“a”
打开一个文件,以便在文件存在时写入并附加到该文件,而Path
s函数似乎具有相同的功能(my_Path.open(“a”)
)
但是方便的.write_text(“..”)
快捷方式呢,有没有一种方法可以使用pathlib
打开并附加到一个文件,只需执行与open()
相同的操作
为了清楚起见,我可以这样做
以我的路径打开('a')作为fp的:
fp.write(‘我的文本’)
但还有别的办法吗
my\u路径。写入文本('my text',mode='a')
实际上不是,正如您在pathlib模块中看到的,存在两种类型的路径类:
- 纯路径类{PurePath、PurePosixPath、PureWindowsPath}
- 具体路径类{path,PosixPath,WindowsPath}李>
*pathsegments
如果您查看可用的读/写方法(读/写字节和写/写字节),您也会看到模式也不可用
因此,正如您已经发现的,您可以对这些pathlib类使用mode的唯一方法是使用open
方法,即:
with my_path.open("a") as f:
f.write("...")
这是经过设计的,这样pathlib类就变得非常“干净”。此外,上面的代码片段已经是规范的,因此无法进一步简化。您可以在上下文管理器之外使用open
方法,不过:
f = my_path.open("a")
f.write("...")
在库pathlib中,方法Path()。write_text和Path()。write_bytes关闭finalize时的开始。 例: 当在方法上使用其他模式时,如append(a),该方法将打开TextIOWrapper,然后 写入[文本|字节]关闭文本自动包装器
f = Path('file.txt')
f.open("a")
f.write_text('my text')
或
否则必须手动关闭
f = Path('file1.txt').open('a')
f.write('my text')
f.close()
但可以这样:
fp = Path('test.txt').open('a')
<_io.TextIOWrapper name='test.txt' mode='a' encoding='UTF-8'>
fp.write('my text')
fq = Path('test1.txt').open('ab', encoding='iso8859-1')
<_io.TextIOWrapper name='test1.txt' mode='a' encoding='iso8859-1'>
fq.write(b'my text')
fp=Path('test.txt')。打开('a'))
fp.write(‘我的文本’)
fq=Path('test1.txt')。open('ab',encoding='iso8859-1')
写(我的文字)
如果与结构一起使用太麻烦,这可能会提供一种解决方法:
from pathlib import Path as p
t1 = "The quick brown fox"
t2 = "just jumped over the fence"
t3 = "to greet the lazy poodle."
mypath = p("D:\Try_this")
myfile = p("fox.txt")
if not(mypath.is_dir()):
mypath.mkdir()
wholepath = p(mypath / myfile)
wholepath.write_text("\n".join([t1,t2,t3]))
你应该复习你的答案。Path.open返回的对象没有write_text或write_bytes方法,并且不会自动关闭。只有手动关闭才能进行更改。Path对象的方法将应用更改并自动关闭,但它们不会受到open()调用的影响。我不想刻薄,但我不明白这是怎么被提升的。AttributeError:“\u io.TextIOWrapper”对象没有属性“write\u text”对不起,我错了。我已经纠正了我不理解这句话:这是经过设计的,这样pathlib类就变得非常“干净”这是如何使类变得干净的?它们已经包含了
write.*
方法,这些方法不够灵活。如果方法(或类)不脏,例如向其添加可选参数append=False
如何使其脏?
fp = Path('test.txt').open('a')
<_io.TextIOWrapper name='test.txt' mode='a' encoding='UTF-8'>
fp.write('my text')
fq = Path('test1.txt').open('ab', encoding='iso8859-1')
<_io.TextIOWrapper name='test1.txt' mode='a' encoding='iso8859-1'>
fq.write(b'my text')
from pathlib import Path as p
t1 = "The quick brown fox"
t2 = "just jumped over the fence"
t3 = "to greet the lazy poodle."
mypath = p("D:\Try_this")
myfile = p("fox.txt")
if not(mypath.is_dir()):
mypath.mkdir()
wholepath = p(mypath / myfile)
wholepath.write_text("\n".join([t1,t2,t3]))