Skip to main content
 首页 » 编程设计

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

2025年05月04日15TianFang

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

请您参考如下方法:

波浪号 ~表示主目录是 shell 约定。它由os.system 中的shell 展开, 但它在 Python 中是按字面理解的。

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