Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 附加模式下的路径库路径“写入文本”_Python_Python 3.x_Pathlib - Fatal编程技术网

Python 附加模式下的路径库路径“写入文本”

Python 附加模式下的路径库路径“写入文本”,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(‘我的文本’)

python
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]))