使用 pathlib 创建新文件夹并将文件写入其中
Create new folder with pathlib and write files into it
我正在做这样的事情:
import pathlib
p = pathlib.Path("temp/").mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
f.write(result)
Error message: AttributeError: 'NoneType' object has no attribute 'open'
显然,根据错误消息,mkdir
returns None
。
让-弗朗索瓦·法布尔建议进行此更正:
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
...
这触发了一条新的错误消息:
File "/Users/user/anaconda/lib/python3.6/pathlib.py", line 1164, in open
opener=self._opener)
TypeError: an integer is required (got type str)
你可以试试:
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
fn = "test.txt" # I don't know what is your fn
filepath = p / fn
with filepath.open("w", encoding ="utf-8") as f:
f.write(result)
你不应该给一个字符串作为路径。您的对象 filepath
具有方法 open
.
pathlib module offers an open
method that has a slightly different signature to the built-in open函数。
路径库:
Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)
内置:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
在这个 p = pathlib.Path("temp/")
的情况下,它创建了一个路径 p
所以调用 p.open("temp."+fn, "w", encoding ="utf-8")
带有位置参数(不使用关键字)期望第一个是 mode
, 然后 buffering
, 而 buffering
需要一个整数, 这就是错误的本质;需要一个整数,但它收到了字符串 'w'
。
此调用 p.open("temp."+fn, "w", encoding ="utf-8")
试图打开路径 p
(这是一个目录)并且还提供了一个不受支持的文件名。您必须构建完整路径,然后调用路径的 open 方法或将完整路径传递给 open 内置函数。
可以直接初始化filepath
并为parent
属性创建父目录:
from pathlib import Path
filepath = Path("temp/test.txt")
filepath.parent.mkdir(parents=True, exist_ok=True)
with filepath.open("w", encoding ="utf-8") as f:
f.write(result)
也许,这是你想做的最短的代码。
import pathlib
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
(p / ("temp." + fn)).write_text(result, encoding="utf-8")
在大多数情况下,它甚至不需要 open() 上下文,而是使用 write_text()。
您还可以执行以下操作:
text_path = Path("random/results").resolve()
text_path.mkdir(parents=True, exist_ok=True)
(text_path / f"{title}.txt").write_text(raw_text)
我正在做这样的事情:
import pathlib
p = pathlib.Path("temp/").mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
f.write(result)
Error message: AttributeError: 'NoneType' object has no attribute 'open'
显然,根据错误消息,mkdir
returns None
。
让-弗朗索瓦·法布尔建议进行此更正:
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
...
这触发了一条新的错误消息:
File "/Users/user/anaconda/lib/python3.6/pathlib.py", line 1164, in open opener=self._opener)
TypeError: an integer is required (got type str)
你可以试试:
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
fn = "test.txt" # I don't know what is your fn
filepath = p / fn
with filepath.open("w", encoding ="utf-8") as f:
f.write(result)
你不应该给一个字符串作为路径。您的对象 filepath
具有方法 open
.
pathlib module offers an open
method that has a slightly different signature to the built-in open函数。
路径库:
Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)
内置:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
在这个 p = pathlib.Path("temp/")
的情况下,它创建了一个路径 p
所以调用 p.open("temp."+fn, "w", encoding ="utf-8")
带有位置参数(不使用关键字)期望第一个是 mode
, 然后 buffering
, 而 buffering
需要一个整数, 这就是错误的本质;需要一个整数,但它收到了字符串 'w'
。
此调用 p.open("temp."+fn, "w", encoding ="utf-8")
试图打开路径 p
(这是一个目录)并且还提供了一个不受支持的文件名。您必须构建完整路径,然后调用路径的 open 方法或将完整路径传递给 open 内置函数。
可以直接初始化filepath
并为parent
属性创建父目录:
from pathlib import Path
filepath = Path("temp/test.txt")
filepath.parent.mkdir(parents=True, exist_ok=True)
with filepath.open("w", encoding ="utf-8") as f:
f.write(result)
也许,这是你想做的最短的代码。
import pathlib
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
(p / ("temp." + fn)).write_text(result, encoding="utf-8")
在大多数情况下,它甚至不需要 open() 上下文,而是使用 write_text()。
您还可以执行以下操作:
text_path = Path("random/results").resolve()
text_path.mkdir(parents=True, exist_ok=True)
(text_path / f"{title}.txt").write_text(raw_text)