Python不识别目录os.path.isdir()
问题描述:
我有以下Python代码来删除目录中的文件。 出于某种原因,我的.svn目录不被识别为目录。Python不识别目录os.path.isdir()
而且我得到以下输出:
.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)
答
你需要检查之前创建的全路径名:
if not os.path.isdir(os.path.join(path, each)):
...
答
您需要os.path.join调用上找到的文件/目录listdir同时路径,即
for each in os.listdir(path):
if os.path.isdir(os.path.join(path, each)):
....
如果你不这样创建一个绝对路径,你将会用当前的工作目录进行测试,这可能没有svn目录。
另外,不要显式比较布尔值。如果将它作为布尔表达式处理(某些函数可能会返回非真或假真值,即无或实例)
+0
在ospath中有一种叫做abspath的方法,但是这对我也不适用。你知道为什么这不起作用吗? – vargonian 2014-02-14 21:11:39
答
您也可以切换到目标目录,而不是构建绝对路径。
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) # <--
我在这个问题上花了一点时间,结果证明我需要使用os.path.join()。谢谢你的提示。 – 2015-07-16 14:07:24