在Windows上使用Python按类型删除文件

7

我知道如何删除单个文件,但是我不知道如何实现删除特定类型目录下的所有文件。

假设目录是\myfolder

我想删除所有的.config文件,但不删除其他类型的文件。应该怎么做呢?

非常感谢。


你的意思是要删除所有扩展名为.config的文件吗? - Kenan Banks
你想删除特定路径下的所有 .config 文件吗?如果你只想删除一个 .config 文件,那么你可以直接使用 os.remove(".config")。 - Dan Wolchonok
是的,我想要删除特定目录下包含的所有 .config 文件。 - choszen
一个目录及其所有子目录,还是只有该目录? - Kenan Banks
1
问题是重复的,这里提供了一个简洁的解释: https://dev59.com/snI-5IYBdhLWcg3wJE0K - Werner Trelawney
3个回答

17
使用glob模块:
import os
from glob import glob

for f in glob ('myfolder/*.config'):
   os.unlink (f)

1
没错,glob是这里正确的方法(当然,如果你不想遍历子目录,那就需要用os.walk)。 - Alex Martelli

5
我会做以下类似的事情:
import os
files = os.listdir("myfolder")
for f in files:
  if not os.path.isdir(f) and ".config" in f:
    os.remove(f)

该程序列出目录中的文件,并在文件不是目录且文件名中有“.config”时删除它。你需要在与“myfolder”相同的目录中,或者提供完整的目录路径。如果需要递归执行此操作,建议使用“os.walk”函数


我实际上是指文件,而不是文件夹。抱歉,丹。 - choszen
不是你的错 - 但由于问题的编辑,这个答案现在已经过时了。 - Kenan Banks
注意,这将删除类似于“my.config.bak”这样的文件。这可能不是 OP 想要的。 - Kenan Banks

1

给你:

import os

# Return all files in dir, and all its subdirectories, ending in pattern
def gen_files(dir, pattern):
   for dirname, subdirs, files in os.walk(dir):
      for f in files:
         if f.endswith(pattern):
            yield os.path.join(dirname, f)


# Remove all files in the current dir matching *.config
for f in gen_files('.', '.config'):
   os.remove(f)

请注意,gen_files 可以很容易地重写为接受一个模式元组,因为 str.endswith 接受一个元组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接