1.普通用户删除管理员权限文件
你可以尝试以下几种方法来解决 PermissionError:
-
以管理员身份运行脚本:右键点击你的 Python 脚本,选择“以管理员身份运行”(或者任务计划程序选择最高权限运行)。
-
检查文件权限:右键点击该文件夹,选择“属性”,在“安全”选项卡中检查并修改权限,确保你有删除的权限。
-
关闭相关程序:确保没有其他程序正在使用该文件夹,特别是一些后台进程。
-
使用
os.chmod:在删除之前,可以使用os.chmod修改文件夹权限:import os import stat path = 'C:\\Program Files (x86)\\scoped_dir364_389623325' os.chmod(path, stat.S_IWRITE) # 使其可写 os.rmdir(path) # 删除文件夹
要删除所有以 scoped_dir 开头的文件夹,可以使用 os.listdir() 列出目录中的所有文件夹,然后筛选出符合条件的文件夹进行删除。以下是修改后的代码示例:
import os
import stat
import logging
import shutil
# 配置日志
logging.basicConfig(
filename='delete_folder.log', # 日志文件名
level=logging.DEBUG, # 日志级别
format='%(asctime)s - %(levelname)s - %(message)s', # 日志格式
)
# 指定父目录
parent_path = 'C:\\Program Files (x86)'
try:
# 遍历父目录中的所有文件夹
for folder_name in os.listdir(parent_path):
if folder_name.startswith('scoped_dir'):
folder_path = os.path.join(parent_path, folder_name)
# 使文件夹可写
os.chmod(folder_path, stat.S_IWRITE)
logging.info(f'成功更改权限:{folder_path}')
# 删除文件夹及其内容
shutil.rmtree(folder_path)
logging.info(f'成功删除文件夹及其内容:{folder_path}')
except PermissionError as e:
logging.error(f'权限错误:{e}')
except FileNotFoundError as e:
logging.error(f'文件未找到:{e}')
except Exception as e:
logging.error(f'发生错误:{e}')
使用说明:
- 将代码保存为
delete_scoped_dirs.py。 - 在命令行中以管理员身份运行该脚本:
python delete_scoped_dirs.py。 - 查看当前目录下的
delete_folder.log文件,以查看日志信息。
这个脚本会遍历指定父目录下的所有文件夹,删除所有以 scoped_dir 开头的文件夹及其内容。
2.遍历指定文件夹文件和内容,方便问AI
希望将支持多文件夹递归遍历的代码修改为不再在控制台打印内容,而是把所有遍历结果(包括各文件夹的路径、文件路径、文件内容、提示 / 错误信息)统一写入指定的 txt 文件中,以下是修改后的完整代码:
from pathlib import Path
def traverse_paths_to_txt(*paths, output_txt="/mnt/d/file/code.txt"):
"""
递归遍历多个指定的文件夹,或直接读取指定的文件,将所有结果写入指定的txt文件(无控制台打印)
:param paths: 可变参数,接收一个或多个文件/文件夹路径字符串
:param output_txt: 输出的txt文件路径,默认值可根据需要修改
"""
# 1. 校验传入的路径列表是否为空
if not paths:
# 即使无路径,也将错误信息写入txt
with open(output_txt, 'w', encoding='utf-8') as f:
f.write("错误:未指定任何需要处理的文件/文件夹路径!\n")
return
# 2. 确保输出txt文件的目录存在(避免路径不存在导致写入失败)
output_dir = Path(output_txt).parent
output_dir.mkdir(parents=True, exist_ok=True) # 自动创建多级目录
# 3. 打开txt文件,写入所有处理结果('w'覆盖原有内容,'a'为追加)
with open(output_txt, 'w', encoding='utf-8') as txt_file:
# 遍历每个传入的路径(文件/文件夹)
for idx, input_path in enumerate(paths, 1):
# 写入当前处理路径的标识,区分不同路径的结果
txt_file.write(f"\n========== 开始处理第 {idx} 个路径:{input_path} ==========\n")
# 转换为Path对象,校验路径是否存在
current_path = Path(input_path)
if not current_path.exists():
error_info = f"错误:路径 {input_path} 不存在!跳过该路径\n"
txt_file.write(error_info)
continue
# ========== 新增逻辑:判断是文件还是文件夹 ==========
if current_path.is_file():
# 若是文件:直接读取内容并写入
txt_file.write(f"【文件】路径:{current_path.resolve().as_posix()}\n")
try:
file_content = current_path.read_text(encoding='utf-8')
txt_file.write(f" 文件内容:\n{file_content}\n")
except UnicodeDecodeError:
txt_file.write(f" 提示:文件 {current_path.name} 是二进制文件或非UTF-8编码,跳过内容读取\n")
except Exception as e:
txt_file.write(f" 错误:读取文件 {current_path.name} 失败,异常:{str(e)}\n")
txt_file.write("=" * 40 + "\n")
elif current_path.is_dir():
# 若是文件夹:执行原有递归遍历逻辑
txt_file.write(f"开始递归遍历文件夹:{input_path}\n")
txt_file.write("=" * 60 + "\n")
# 递归遍历当前文件夹下所有条目
for item in current_path.rglob("*"):
item_full_path = item.resolve().as_posix()
if item.is_dir():
# 写入文件夹路径
txt_file.write(f"【文件夹】路径:{item_full_path}\n")
elif item.is_file():
# 写入文件路径
txt_file.write(f"【文件】路径:{item_full_path}\n")
# 读取文件内容并写入(保留原异常处理)
try:
file_content = item.read_text(encoding='utf-8')
txt_file.write(f" 文件内容:\n{file_content}\n")
except UnicodeDecodeError:
txt_file.write(f" 提示:文件 {item.name} 是二进制文件或非UTF-8编码,跳过内容读取\n")
except Exception as e:
txt_file.write(f" 错误:读取文件 {item.name} 失败,异常:{str(e)}\n")
# 写入分隔符,优化txt文件可读性
txt_file.write("=" * 40 + "\n")
else:
# 既不是文件也不是文件夹(如符号链接等)
txt_file.write(f"提示:路径 {input_path} 既不是文件也不是文件夹,跳过处理\n")
txt_file.write("=" * 40 + "\n")
# 写入当前路径处理完成的标识
txt_file.write(f"========== 第 {idx} 个路径 {input_path} 处理完成 ==========\n")
# 调用示例
if __name__ == "__main__":
# 方式1:混合传入文件夹和文件路径(按需修改),使用默认的txt输出路径
traverse_paths_to_txt(
"/home/yys/r2-drive/app", # 文件夹:递归遍历
"/home/yys/r2-drive/components", # 文件夹:递归遍历
"/home/yys/r2-drive/types", # 文件夹:递归遍历
"/home/yys/r2-drive/lib", # 文件夹:递归遍历
"/home/yys/r2-drive/package.json", # 文件:直接读取内容
"/home/yys/r2-drive/next.config.mjs" # 文件:直接读取内容
)
# 方式2:先定义路径列表(文件+文件夹),再解包传入
# path_list = [
# "/home/yys/r2-drive/app",
# "/home/yys/r2-drive/test.txt" # 单个文件
# ]
# traverse_paths_to_txt(*path_list, output_txt="/home/yys/result.txt")
评论区(0 条)
发表评论⏳ 加载编辑器…