【问题标题】:Python os- When I create a directory using os.mkdir, os.path.isdir tells me the directory does not exist [closed]Python os-当我使用 os.mkdir 创建目录时,os.path.isdir 告诉我该目录不存在 [关闭]
【发布时间】:2012-08-16 14:39:44
【问题描述】:

我正在编写一个相当简单的日记条目程序,我需要检查一个目录是否存在,如果不存在,我需要创建一个。

在 journal.py 中,我正在导入另一个模块:文件。该模块处理文件和目录的创建和删除

journal.py

if __name__ == '__main__':
    if files.testForDir('entries') == False:
        print 'Directory "entries" does not exist'
        print 'Attempting to create directory'
        files.createDir('entires')

files.py

def testForDir(dirname, path=os.getcwd()):
    pathtotest = os.path.join(path, dirname)
    return os.path.isdir(pathtotest)

def createDir(dirname, path=os.getcwd()):
    dirpath = os.path.join(path, dirname)
    try:
        os.mkdir(dirpath)
    except OSError as error:
        print error

我的问题:当我在 Ubuntu 中创建目录时,testForDir() 返回正确的结果。当我在没有 /entries 的情况下运行程序时,它也可以正常运行。它使用 os.mkdir() 创建目录,并且 /entries 出现在 Ubuntu 中。但是,当我在 os.mkdir() 创建目录后运行它时,testForDir() 返回 False 并引发 OSError 异常,因为该文件夹已经存在。

所以正式提出问题,并重复我自己:当我使用 os.mkdir() 创建目录时,os.path.isdir() 告诉我目录不存在。

系统信息: Ubuntu 12.04 LTS 32bit,Python 2.7。

文件结构:home/name/Programs/journal/。

日志包含:entrys.py(blank)、files.py、journal.py、entry(dir)

【问题讨论】:

  • 旁白:path=os.getcwd() 可能不会像您认为的那样做。每次调用函数时它都不会获取当前目录:它在定义函数时获取当前目录一次。如果您稍后更改 cwd,函数仍将使用原始路径。
  • @DSM 谢谢,我以后可能真的需要更改工作目录!
  • 通常的习惯用法是在def f(path=None): path = path if path is not None else os.getcwd() 上使用一些变体来避免这个问题。
  • 我无法识别您提供的代码示例中的语法。路径=路径?编辑:我知道你在做什么!
  • 一行,相当于if path is None: path = os.getcwd()。谷歌python ternary。你可以写path = something if condition else some_other_value。在这种情况下,something 恰好是 path

标签: python operating-system


【解决方案1】:

你有一个拼写错误:

'entries' != 'entires'

停止在多个位置对同一个字符串进行硬编码(拼写错误是一种风险,但以后更改也会带来不必要的痛苦)。

把它放在一个变量中,如果你拼错了变量名,Python 会警告你。

【讨论】:

  • 哇。哇。我不敢相信我错过了。谢谢。
  • @Koldof -- 如果此答案解决了您的问题,请随时接受(单击答案旁边的小复选标记)。这样其他人就知道你的问题已经解决了。您还将获得小幅声望提升...
【解决方案2】:

我认为整个事情可以更简单:

try:
    somfunc(dirpath)
except:
    os.mkdir(dirpath)
    somfunc(dirpath)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多