2

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")

改编自此 SO 答案的代码

4

1 回答 1

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

于 2013-08-06T01:14:57.007 回答