使用 python 有选择地删除文件夹的内容

Deleting Contents of a folder selevtively with python

我想定期删除 Windows 目录的内容,其中包括文件和包含更多文件的子目录。但是,我没有不想删除的特定文件(每次都是同一个文件)。我正在使用 shutil.rmtree 删除文件夹的内容,但我正在删除我希望保留的文件。我如何设置例外以防止删除我想保留的文件,shutil 是最好的方法吗?

rmtree 似乎没有任何您可以使用的过滤机制;此外,由于其部分功能是删除目录本身,而不仅仅是其内容,因此没有意义。

如果您可以对文件进行一些操作,使 rmtree 删除它的尝试失败,您可以让 rmtree 忽略此类错误,从而保留您的文件但删除其他文件。如果不能,您可以求助于 os.walk 遍历目录的内容,从而决定自己删除哪些项目。

它只是一个文件还是一大堆文件? 因为如果只有这一个文件,你可以右键单击 - 属性 - 安全并检查 'deny' everywhere

http://www.technorms.com/27407/prevent-files-from-being-deleted-windows

要获取目录中的路径名列表,请使用 glob:

假设您只想找到 .gif 个文件并删除这些文件:

import glob
gif_list = glob.glob('your/path/name/'+'*.gif')

对于您的路径,这会找到所有以 .gif 结尾的文件。你可以删除它们,复制它们,做任何你想做的事。

或者,使用列表理解:

import glob
#just get a list of all the files/folders in your path:
path_list = glob.glob('your/path/name/'+'*')
gif_list = [x for x in file_list if x[-4:] == '.gif']

当然,Glob 也会找到所有文件夹。您可以筛选出要保留的文件 and/or 个文件夹,并使用 rmtree 删除其余的。例如,假设您想保留名为 keep.me:

的文件
import glob 
path_list = glob.glob('your/path/name/'+'*')
del_list = [x for x in path_list if x != 'your/path/name/'+'keep.me']

像这样的东西应该有用。 试试吧!