Python无法识别目录os.path.isdir()[重复]
Posted
技术标签:
【中文标题】Python无法识别目录os.path.isdir()[重复]【英文标题】:Python not recognising directories os.path.isdir() [duplicate] 【发布时间】:2011-04-15 06:12:00 【问题描述】:我有以下 Python 代码来删除目录中的文件。 由于某种原因,我的 .svn 目录没有被识别为目录。
我得到以下输出:
.svn 不是目录
任何想法都将不胜感激。
def rmfiles(path, pattern):
pattern = re.compile(pattern)
for each in os.listdir(path):
if os.path.isdir(each) != True:
print(each + " not a dir")
if pattern.search(each):
name = os.path.join(path, each)
os.remove(name)
【问题讨论】:
【参考方案1】:检查前需要创建完整路径名:
if not os.path.isdir(os.path.join(path, each)):
...
【讨论】:
我在这个问题上花了一点时间,结果发现我需要使用 os.path.join()。谢谢你的提示。【参考方案2】:您将需要 os.path.join 使用找到的文件/目录调用 listdir 的路径,即
for each in os.listdir(path):
if os.path.isdir(os.path.join(path, each)):
....
如果您不以这种方式创建绝对路径,您将改为针对当前工作目录进行测试,该目录可能没有 svn 目录。
另外,不要显式比较布尔值。让 if 将其作为布尔表达式处理(某些函数可能返回非 True/False 真值,即 None 或实例)
【讨论】:
ospath 中有一个名为 abspath 的方法,但这对我也不起作用。你知道为什么这不起作用吗?【参考方案3】:您也可以切换到目标目录,而不是构造绝对路径。
def rmfiles(path, pattern):
pattern = re.compile(pattern)
oldpath = os.getcwd() # <--
os.chdir(path) # <--
try:
for each in os.listdir('.'):
if os.path.isdir(each) != True:
print(each + " not a dir")
if pattern.search(each):
name = os.path.join(path, each)
os.remove(name)
finally:
os.chdir(oldpath) # <--
【讨论】:
以上是关于Python无法识别目录os.path.isdir()[重复]的主要内容,如果未能解决你的问题,请参考以下文章
python中os.path.isdir()等函数的作用和用法