尝试以“w”模式创建文件时的Python文件IOError

时间:2013-08-06 01:12:01

标签: python python-2.6

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

1 个答案:

答案 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是否已存在。如果它不是您所期望的,那么您当前的工作目录可能不是您想要的那样。