0

我正在学习 python,我想要完成的操作之一是更改目录。我将目录名称存储在字典中,然后尝试按如下方式访问这些目录:

创建目录:

for i in range(length):
    try:
        original_umask = os.umask(0)
        os.makedirs(item_dict[i], 0755)
    finally:
        os.umask(original_umask)
for i in range (length):
    os.chdir(item_dict[i])

这是有效的。但是,当我稍后尝试通过访问这些目录进行进一步处理时,我遇到了以下错误:

osdir = os.getcwd()
print " current working directory is "  + osdir //works correctly
for i in range (length):
    os.chdir((item_dict[i])

Traceback (most recent call last):
  File ".\actions.py", line 40, in <module>
    os.chdir((item_dict[i]))
WindowsError: [Error 2] The system cannot find the file specified: u'd-025c49f7-116e-4ad1-909e-13cc59b03dc3/'

这里 025c49f7-116e-4ad1-909e-13cc59b03dc3/ 是目录名。如前所述,相同的代码可以更早地工作。任何指针?

4

1 回答 1

1

os.chdir()更改 Python 脚本其余部分的当前目录。您可能最好不要更改目录,并使用相对路径操作目录中的文件。

换句话说,

os.mkdir('a')
os.chdir('a')
os.mkdir('b')
os.chdir('b')

最终创建a/b并将您留在此目录中;再次尝试os.chdir('b')失败,因为这个目录b 里面没有- 你只是刚刚创建它,所以它显然是空的。

我猜你想创建ab作为当前目录的子目录,而不是前者里面的后者。os.chdir('a')创建后不做a显然可以解决此问题;更一般地说,除非您特别想递归地创建嵌套目录的深层序列,否则您的程序很少需要切换它们的工作目录。

不用说,

os.chdir('a')
newfile = open('c', 'w')

可以在不更改工作目录的情况下改写;

newfile = open(os.path.join(['a', 'c']), 'w')

在这种微不足道的情况下open('a/c', 'w')也可以使用;但是,如果您在目录名和/或文件名位于变量中的情况下进行非平凡的处理,您需要了解更通用的os.path.join()语法。

于 2018-07-11T16:00:51.687 回答