忽略 Python listdir 中的 "System Volume Information"

Ignore "System Volume Information" in Python listdir

我目前正在尝试获取 Windows 卷上的所有文件,以便复制某些文件。从一个文件夹复制到另一个文件夹工作得很好,但是当尝试 listdir 然后遍历找到的卷文件时,我只是被 "System Volume Information".[=13 的拒绝访问异常所打招呼=]

如何在循环中ignore/skip这个?

我正在使用递归函数,第一次使用卷本身的根路径调用它。

def list_all(path):
files = os.listdir(path)

for file in files:
    low_path = os.path.join(path, file)

    if os.path.isdir(low_path):
        list_all(low_path)
    else:
        # shutil.copy()

您可以添加一个 try/except 区块

def list_all(path):
files = os.listdir(path)

try:
  files.remove("System Volume Information")
except:
  print("System Volume Information not present in this directory")


for file in files:
    low_path = os.path.join(path, file)

    if os.path.isdir(low_path):
        list_all(low_path)
    else:
        # shutil.copy()

RMPR 的回答很好解决手头的问题(项目列表中只有一个例外)。

如果将 try/except 移动到循环内部,则循环可以更通用,以跳过所有“访问被拒绝”的实例(WindowsImageBackup 是一个常见示例,还有其他示例)。

def list_all(path):
    files = os.listdir(path)


    for file in files:
        low_path = os.path.join(path, file)
        try:
            if os.path.isdir(low_path):
                list_all(low_path)
            else:
                # shutil.copy()
        except:
            print("Directory ",low_path, " has denied access.")