【问题标题】:os.path.exists is not working as expected in pythonos.path.exists 在 python 中没有按预期工作
【发布时间】:2017-09-12 05:52:19
【问题描述】:

我正在尝试在主路径中创建一个目录,并在使用 os.path.exists() 重新创建之前重新检查该目录是否存在于主路径中,但它没有按预期工作。

if os.access("./", os.W_OK) is not True:
    print("Folder not writable")
    dir_name_tmp = subprocess.Popen('pwd', stdout=subprocess.PIPE, shell=True)
    dir_name_tmp = dir_name_tmp.stdout.read()
    dir_name = dir_name_tmp.split('/')[-1]
    dir_name = dir_name.rstrip()

    os.system('ls ~/')
    print "%s"%dir_name

    if not os.path.exists("~/%s"%(dir_name)):
        print "Going to create a new folder %s in home path\n"%(dir_name)
        os.system('mkdir ~/%s'%(dir_name))
    else:
        print "Folder %s Already Exists\n"%(dir_name)
        os.system('rm -rf ~/%s & mkdir ~/%s'%(dir_name, dir_name))
else :
    print("Folder writable")

第一次输出:

Folder not writable
Desktop  Downloads  Perforce  bkp  doc  project
hello.list
Going to create a new folder hello.list in home path

第二次输出:

Folder not writable
Desktop  Downloads  Perforce  bkp  doc  hello.list  project
hello.list
Going to create a new folder hello.list in home path

mkdir: cannot create directory `/home/desperado/hello.list': File exists

虽然目录存在,但它不会进入 else 循环。我错过了什么吗?分享你的意见!

提供建议的更新工作代码:使用 $HOME 目录和 os.path.expandusr

if os.access("./", os.W_OK) is not True:
    log.debug("Folder Is Not writable")
    dir_name_tmp = subprocess.Popen('pwd', stdout=subprocess.PIPE, shell=True)
    dir_name_tmp = dir_name_tmp.stdout.read()
    dir_name = dir_name_tmp.split('/')[-1]
    dir_name = dir_name.rstrip()

    log.debug("dir_name is %s"%dir_name)

    dir_name_path = (os.path.expanduser('~/%s'%(dir_name))).rstrip()
    log.debug("dir_name_path is %s"%(dir_name_path))

    # if not os.path.exists('~/%s'%(dir_name)):
    if not os.path.exists('%s'%(dir_name_path)):
        log.debug("Going to create a new folder %s in home path\n"%(dir_name))
        os.system('mkdir $HOME/%s'%(dir_name))
    else:
        log.debug("Folder %s Already Exists\n"%(dir_name))
        os.system('rm -rf %s'%(dir_name_path))
        os.system('mkdir $HOME/%s'%(dir_name))
else :
    log.debug("Folder Is Writable")

【问题讨论】:

  • 请勿使用x is not True 进行比较。只需使用not x
  • 在签入os.path.exists() 时,您只是传递了dir_name,而不是绝对路径。因此它返回False。尝试在调用os.path.exists()时传递目录的绝对路径,它应该可以工作。
  • @KarlKnechtel:对不起,我没听明白。问题在于第二个 if 条件,即如果不是 os.path.exists("~/%s"%(dir_name)):。我只使用 if not case only。
  • @Tanu:我确实通过了绝对路径。如果您看到我正在使用 ~/%s,即 ~/(目录名称)。我正在寻找主路径中的目录名称,但它仍然说该目录不存在。
  • Python 不会自动扩展 ~。使用os.path.expanduser()

标签: python python-2.7


【解决方案1】:

代表主目录的波浪符号~ 是一个shell 约定。它在os.system 中被shell 扩展,但在Python 中是按字面意思理解的。

所以你创建<HOME>/<DIR>,但测试~/<DIR>

【讨论】:

    【解决方案2】:

    正如VPfB 所提到的,波浪号是Python 的字面意思。要解决此问题,您需要获取实际的主目录。

    现在,在不同的平台上,主目录有不同的路径。

    要获取主目录,os.path.expanduser 会很有用。

    >>> import os
    >>> os.path.expanduser("~")
    '/Users/ashish'
    

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2014-10-11
      • 1970-01-01
      相关资源
      最近更新 更多