我有以下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)
答案 0 :(得分:37)
您需要在检查之前创建完整路径名:
if not os.path.isdir(os.path.join(path, each)):
...
答案 1 :(得分:2)
你需要在os.path.join中使用找到的文件/目录调用listdir的路径,即
for each in os.listdir(path):
if os.path.isdir(os.path.join(path, each)):
....
如果你没有以这种方式创建绝对路径,那么你将测试你当前的工作目录,这可能是没有svn目录的。
另外,不要显式比较布尔值。如果将它作为布尔表达式处理(某些函数可能返回非真/假真值,即无或实例)
答案 2 :(得分:0)
您也可以切换到目标目录,而不是构建绝对路径。
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) # <--