Python读取文本后缀列表批量删除Web服务器指定分辨率媒体文件
问题原因
当前代码无法运行的核心错误为:你在if file.endswith(str(lines))行将整个后缀列表强制转为字符串后进行匹配,相当于要匹配"['-150x150.jpg', '-100x100.jpg']"这类列表字面量字符串,永远不可能命中目标文件。
修复方案
Python内置的str.endswith()方法原生支持传入元组类型的后缀集合,只要文件名匹配元组中任意一个后缀就会返回True,只需修改对应判断逻辑即可:
import os dir_name = "path" # 过滤掉目录,只处理文件避免误删文件夹 folder = [f for f in os.listdir(dir_name) if os.path.isfile(os.path.join(dir_name, f))] with open('list.txt', encoding='utf-8') as f: # 过滤空行,避免空后缀匹配所有文件 suffix_list = [line.strip() for line in f.read().splitlines() if line.strip()] # 转成元组供endswith方法使用 suffix_tuple = tuple(suffix_list) for file in folder: if file.endswith(suffix_tuple): # 调试阶段建议先打印待删除文件,确认匹配逻辑无误后再取消注释删除行 print(f"待删除文件:{file}") # os.remove(os.path.join(dir_name, file))
配套配置要求
你的list.txt每一行对应一个需要匹配的后缀,无需额外符号,示例内容如下:
-150x150.jpg -100x100.jpg -75x75.jpeg -50x50.png -200x200.webp
额外优化建议
如果衍生文件的分辨率规则固定为数字x数字格式,你甚至可以不用维护后缀列表,直接用正则匹配所有符合规则的文件:
import re # 匹配任意分辨率后缀的图片,不区分扩展名大小写 pattern = re.compile(r'-\d+x\d+\.(jpg|jpeg|png|webp)$', re.I) for file in folder: if pattern.search(file): print(f"待删除文件:{file}") # os.remove(os.path.join(dir_name, file))
内容的提问来源于stack exchange,提问作者anu_
相关产品推荐
相关产品推荐

