【发布时间】: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。