如何在Python中删除web目录下aus相关的特定模式文件?
解决匹配并删除aus相关文件的问题
原代码的问题
你写的glob.glob("/web/*[aus]", recursive=True)存在匹配逻辑错误:[aus]是字符集匹配规则,会匹配文件名包含a、u、s任意单个字符的文件,而不是包含连续字符串aus的文件,这才导致匹配结果不符合预期。
正确实现方案
下面提供两种可靠的实现方式,都能精准定位并删除目标文件:
方式一:分步匹配+批量删除
import glob import os # 1. 匹配所有带aus标识的json文件 aus_json_files = glob.glob("/web/*aus*.json") # 2. 从json文件名中提取对应的编号(比如1520_22) target_numbers = [] for json_path in aus_json_files: filename = os.path.basename(json_path) # 拆分文件名,提取末尾的编号部分 num_part = "_".join(filename.split("_")[-2:]).replace(".json", "") target_numbers.append(num_part) # 3. 收集所有待删除的文件(aus的json + 对应编号的txt) files_to_delete = aus_json_files.copy() for num in target_numbers: txt_file = glob.glob(f"/web/{num}.txt") files_to_delete.extend(txt_file) # 4. 执行删除操作 for file_path in files_to_delete: os.remove(file_path)
方式二:单循环直接处理(更简洁)
如果确认每个aus的json文件都对应唯一的txt文件,可以直接遍历json文件并构造txt路径:
import glob import os for json_path in glob.glob("/web/*aus*.json"): # 删除当前aus的json文件 os.remove(json_path) # 提取编号并构造对应txt文件的路径 filename = os.path.basename(json_path) num_part = "_".join(filename.split("_")[-2:]).replace(".json", "") txt_path = os.path.join("/web", f"{num_part}.txt") # 检查txt文件存在后删除 if os.path.exists(txt_path): os.remove(txt_path)
关键说明
- 用
*aus*来匹配包含连续aus字符串的文件,这才是你需要的模糊匹配规则 - 提取编号时通过拆分文件名的方式,确保能精准对应到目标txt文件,避免误删其他文件
内容的提问来源于stack exchange,提问作者LM10
相关产品推荐
相关产品推荐

