快乐学习
前程无忧、中华英才非你莫属!

PyWin32系列文章-递归目录删除和特殊文件

Python的win32访问文件属性以启用删除

有时您可能需要执行一些操作,例如删除整个目录树。Python有一些很棒的实用程序可以做到这一点,但具有特殊属性的文件通常无法删除。

为了解决这个问题,您需要使用对SetFileAttributes的win32调用作为普通文件。

C++调用如下所示:

BOOL SetFileAttributes(LPCTSTR lpFileName,DWORD dwFileAttributes);

您为它提供了两个参数,即文件名和特定属性,并返回是否成功。

相应的python调用是:int=win32api。SetFileAttributes(路径名,属性)

唯一的问题是你从哪里得到属性。它包含在非常方便的win32con模块中,特别是win32con.FILEATTRIBUTE*。您可以将文件设置为只读、存档、隐藏等。我们关注的是将其设置为正常,因此我们希望:win32con.file_ATTRIBUTE_normal

下面的示例可能很有用,但当然要小心,因为它会删除很多内容。这是一个递归函数。该示例还使用了os模块中的一些方便的函数。

实例

以下是如何删除目录树的基本示例:


import os

import win32api
import win32con

def del_dir(self, path):
    for file in os.listdir(path):
        file_or_dir = os.path.join(path, file)
        if os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):
            del_dir(file_or_dir)  # it's a directory reucursive call to function again
        else:
            try:
                os.remove(file_or_dir)  # it's a file, delete it
            except:
                # probably failed because it is not a normal file
                win32api.SetFileAttributes(file_or_dir, win32con.FILE_ATTRIBUTE_NORMAL)
                os.remove(file_or_dir)  # it's a file, delete it
        os.rmdir(path)  # delete the directory here
打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » PyWin32系列文章-递归目录删除和特殊文件

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏