使用 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']
像这样的东西应该有用。
试试吧!
我想定期删除 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']
像这样的东西应该有用。 试试吧!