【问题标题】:os.chdir to a directory containing spaces/commas in its nameos.chdir 到名称中包含空格/逗号的目录
【发布时间】:2017-02-10 22:10:04
【问题描述】:

我遇到了麻烦。我有几个目录,然后我需要 cd 才能使用 os.chdir。但是我在下一段代码中不断收到错误:

import os
new_folder = 'Zarazogic acid A'
os.chdir(new_folder)
FileNotFoundError: [Errno 2] No such file or directory: 'Zarazogic acid A'

我试图通过以下方式转义字符:

new_directory = 'Zarazogic acid A'
new_directory = new_directory.replace(' ', '\ ')
os.chdir(new_directory)
FileNotFoundError: [Errno 2] No such file or directory: 'Zarazogi\\acid\\A'

尝试使用 '\' 甚至 '\\' 进行转义 - 仍然得到相同的错误。我该如何解决?

【问题讨论】:

  • 您确定从正确的目录开始,并且在该目录中确实有一个名为 Zarazogic acid A 的文件夹吗?
  • 表面上看,问题只是进程当前所在目录下,没有子目录Zarazogic acid A。该函数正在尝试更改为识别名称中空格的目录;目录不存在。检查您是否在您认为自己所在的目录中 - 或使用该目录的绝对路径名。
  • @Wondercricket,抱歉,您的意思是什么?
  • 尝试运行print(os.getcwd()) 看看你是否在你期望的目录中。
  • @user3570029 他们的意思是您可能不在适当的父目录中。一种快速方法,检查“Zarazogic acid A”是否在os.listdir() 中。或查看os.getcwd()

标签: python chdir


【解决方案1】:

Python 3 代码

这是一个简单的 Python 3 脚本 (md23.py),它表明该目录不在您认为的位置。

#!/usr/bin/env python3

import os

new_folder = 'Zarazogic acid A'

print("0:", os.listdir('.'))
os.mkdir(new_folder)
print("1:", os.listdir('.'))
os.chdir(new_folder)
print("2:", os.listdir('.'))
os.chdir('..')
print("3:", os.listdir('.'))
os.rmdir(new_folder)
print("4:", os.listdir('.'))

它并不漂亮,但它适用于 Python 3 — 您必须更改打印以使其适用于 Python 2。

当脚本位于空目录中时,输出为:

0: ['md23.py']
1: ['md23.py', 'Zarazogic acid A']
2: []
3: ['md23.py', 'Zarazogic acid A']
4: ['md23.py']

这表明可以创建、列出、更改目录,新目录为空,更改备份目录级别时它仍然存在,并且可以删除。

你应该能够接受这个,将它放在你当前的脚本旁边,然后运行它,它应该会成功。如果Zarazogic acid A 目录已经存在,它将失败。例如,如果我在运行脚本之前创建目录,我会得到以下输出:

$ mkdir 'Zarazogic acid A'
$ python3 md23.py
0: ['md23.py', 'Zarazogic acid A']
Traceback (most recent call last):
  File "md23.py", line 8, in <module>
    os.mkdir(new_folder)
FileExistsError: [Errno 17] File exists: 'Zarazogic acid A'
$

Python 2 代码

变体脚本md29.py,也打印了目录名称:

#!/usr/bin/env python2.7

import os

new_folder = 'Zarazogic acid A'


print "0:", os.getcwd(), os.listdir('.')
os.mkdir(new_folder)
print "1:", os.getcwd(), os.listdir('.')
os.chdir(new_folder)
print "2:", os.getcwd(), os.listdir('.')
os.chdir('..')
print "3:", os.getcwd(), os.listdir('.')
os.rmdir(new_folder)
print "4:", os.getcwd(), os.listdir('.')

示例运行:

0: /Users/jleffler/soq/junk ['md23.py', 'md29.py']
1: /Users/jleffler/soq/junk ['md23.py', 'md29.py', 'Zarazogic acid A']
2: /Users/jleffler/soq/junk/Zarazogic acid A []
3: /Users/jleffler/soq/junk ['md23.py', 'md29.py', 'Zarazogic acid A']
4: /Users/jleffler/soq/junk ['md23.py', 'md29.py']

【讨论】:

    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 2013-06-28
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2021-07-17
    相关资源
    最近更新 更多