Python版本:2.6.6
我正在尝试使用Python创建一个使用open('file/path/file_name', 'w')
不存在的文件。但是,我不能像这样硬编码文件路径,因为我需要将其作为包含用户指定的路径的变量传递。
这有效:open('/home/root/my_file.txt', 'w')
但我的代码没有:
import os
import sys
input = sys.argv[1] # assume it's "/home/root"
path = os.path.join(input, "my_file.txt")
f = open(path, 'w')
导致异常IOError: [Errno 2] No such file or directory: '/home/root/my_file.txt'
我还尝试了除“w”之外的其他一些模式,比如“w +”和“a”,但它们都没有用。
有谁能告诉我如何解决这个问题?它是由我使用它的错误方式引起的还是因为我正在使用的Python版本?
感谢。
更新
我找到了解决问题的方法:忘记创建目前尚不存在的目录。这是我的最终代码:
import os, errno
import sys
input = sys.argv[1]
try:
os.makedirs(input)
except OSError as e:
if e.errno == errno.EEXIST and os.path.isdir(input):
pass
else:
raise
path = os.path.join(input, "my_file.txt")
with open(path, "w") as f:
f.write("content")
代码改编自this SO answer
答案 0 :(得分:4)
使用相对路径时,如下所示:
open('file/path/file_name', 'w')
这等同于获取当前工作目录,附加/file/path/file_name
,并尝试在该位置打开或创建文件。
因此,如果当前工作目录下没有file
目录,或者存在file
目录,但它下面没有path
目录,则会出现此错误。
如果要创建目录(如果它不存在),则在其下创建文件,您需要明确地执行此操作:
os.makedirs('file/path')
open('file/path/file_name', 'w')
对于这样的调试情况,打印出您尝试打开的文件的绝对路径可能会有所帮助:
print input
print os.path.abspath(input)
这可能是,/home/root/file/path/file_name
。如果这是您的预期,那么您可以检查(在终端或GUI中)/home/root/file/path
是否已存在。如果它不是您所期望的,那么您当前的工作目录可能不是您想要的那样。