os.path.exists在python中没有按预期工作

时间:2017-09-12 05:52:19

标签: python python-2.7

我正在尝试在主路径中创建一个目录,并在使用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")

2 个答案:

答案 0 :(得分:5)

表示主目录的波形符号~是shell约定。它由os.system中的shell扩展,但在字面上理解为Python。

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

答案 1 :(得分:1)

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

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

要获取主目录,os.path.expanduser将非常有用。

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