遍历目录并删除文件扩展名
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))
我正在尝试从网络 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))