I'm doing something like this:
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'
Obviously, based on the error message, mkdir
returns None
.
Jean-Francois Fabre suggested this correction:
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
...
This triggered a new error message:
File "/Users/user/anaconda/lib/python3.6/pathlib.py", line 1164, in open opener=self._opener)
TypeError: an integer is required (got type str)
Create Directory in Python Using the Path. mkdir() Method of the pathlib Module. The Path. mkdir() method, in Python 3.5 and above, takes the path as input and creates any missing directories of the path, including the parent directory if the parents flag is True .
The pathlib is a Python module which provides an object API for working with files and directories. The pathlib is a standard module. Path is the core object to work with files.
The pathlib module of Python makes it very easy and efficient to deal with file paths. The os. path module can also be used to handle path name operations. The difference is that path module creates strings that represent file paths whereas pathlib creates a path object.
Pathlib allows you to easily iterate over that directory's content and also get files and folders that match a specific pattern. Remember the glob module that you used to import along with the os module to get paths that match a pattern?
You could try:
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)
You shouldn't give a string as path. It is your object filepath
which has the method open
.
source
You can directly initialize filepath
and create parent directories for parent
attribute:
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)
The pathlib module offers an open
method that has a slightly different signature to the built-in open function.
pathlib:
Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)
The built-in:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
In the case of this p = pathlib.Path("temp/")
it has created a path p
so calling p.open("temp."+fn, "w", encoding ="utf-8")
with positional arguments (not using keywords) expects the first to be mode
, then buffering
, and buffering
expects an integer, and that is the essence of the error; an integer is expected but it received the string 'w'
.
This call p.open("temp."+fn, "w", encoding ="utf-8")
is trying to open the path p
(which is a directory) and also providing a filename which isn't supported. You have to construct the full path, and then either call the path's open method or pass the full path into the open built-in function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With