遍历目录并删除文件扩展名

Walk directories and remove file extensions

我正在尝试从网络 PC 上的用户文件夹中删除所有 outlook .ost 和 .nst 文件,并且我正在尝试让它将删除的文件写入 CSV 文件。

我可以让它找到目录中的所有文件并将其写入 CSV 文件,但是当我尝试使用 os.remove 删除文件时,它似乎没有 运行,我暂时算了一下。

我在 try 和 except 中添加了跳过正在使用的文件。

import os
import sys

sys.stdout = open("output_file.csv", "w")
try:
    for rootDir, subdir, files in os.walk("//network_pc_name/c$/Users"):
        for filenames in files:
            if filenames.endswith((".nst",".ost")):
                foundfiles = os.path.join(rootDir, filenames)
                #os.remove(os.path.join(rootDir, filenames))
                print(foundfiles)
except:
    pass
sys.stdout.close()

我按照建议对脚本做了一些更改,看起来 运行 快了很多,但是,我似乎无法弄清楚如何忽略正在使用的文件。

我将文件扩展名切换为 .xlsx 和 .txt 文件以模拟打开的 .xlsx 文件收到权限错误并查看脚本是否会继续 运行 并删除 .txt 文件。

我收到以下错误: PermissionError: [WinError 32] 该进程无法访问该文件,因为它正被另一个进程使用:'//DESKTOP-HRLS19N/c$/globtest\Book1.xlsx

import glob
import os

files = [i for i in glob.glob("//DESKTOP-HRLS19N/c$/globtest/**", recursive = True) if i.endswith((".xlsx",".txt"))]

[os.remove(f) for f in files]
with open("output_file.csv", "w") as f:
    f.writelines("\n".join(files))

根据我的经验 glob 更容易:

print([i for i in glob.glob("//network_pc_name/c$/Users/**", recursive=True) if i.endswith((".nst", ".ost"))])

假设打印出您期望的文件:

files = [i for i in glob.glob("//network_pc_name/c$/Users/**", recursive=True) if i.endswith((".nst", ".ost"))]
removed_files = []
for file in files:
    try:
        size = os.path.getsize(file)
        os.remove(file)
        removed_files.append(file + " Bytes: " + size)
    except Exception as e:
        print("Could not remove file: " + file)
with open("output_file.csv", "w") as f:
    f.writelines("\n".join(removed_files))