问题
I am trying to create and write to a text file using Python. I have searched and cannot find a solution/reason for this error.
Here's the code that doesn't work:
afile = 'D:\\temp\\test.txt'
outFile = open(afile, 'w' )
outFile.write('Test.')
outFile.close()
# Error: 2
# Traceback (most recent call last):
# File "<maya console>", line 1, in <module>
# IOError: [Errno 2] No such file or directory: 'D:\\temp\\test.txt' #
Most answers I found related to the slashes in the path, so...
I tried 'D:/temp/test.txt' and got an error.
I tried r'D:\temp\test.txt' and got an error.
When I try to create a file at the root of D:/ I have success.
'D:/test.txt' works.
'D:\\test.txt' works.
r'D:\test.txt' works.
It seems that I can't create the directory path I would like while trying to create the file. What is the correct method for creating files at a specific path with Python on Windows(7)? Am I misunderstanding what open() can do? Does it create directories if they don't exist or do I need explicitly create the directory path before I use open() in 'write' mode to create a file?
回答1:
You are correct in surmising that the parent directory for the file must exist in order for open
to succeed. The simple way to deal with this is to make a call to os.makedirs.
From the documentation:
os.makedirs(path[, mode])
Recursive directory creation function. Like
mkdir()
, but makes all intermediate-level directories needed to contain the leaf directory.
So your code might run something like this:
filename = ...
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
os.makedirs(dirname)
with open(filename, 'w'):
...
回答2:
If you try to create a file in a directory that doesn't exist, you will get that error.
You need to ensure the directory exists first. You can do that with os.makedirs()
as per this answer.
回答3:
Alternately, you could check if the file exists before opening it with:
os.path.exists (afile)
Which will either say True or False, depending on whether it exists.
来源:https://stackoverflow.com/questions/18758673/trying-to-use-openfilename-w-gives-ioerror-errno-2-no-such-file-or-dire