You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则匹配删除指定文件报错求助:匹配规则??_????17*.*

嘿,我来帮你排查下代码里的问题,然后给你一个能正常运行的版本~

你的代码里主要有这几个问题:

  1. 正则表达式写得不对
    你写的r'\w\w[_]\w\w\w\w[1][7]\w+[.]\w+'有点冗余还不符合需求:

    • 像[_]、[1][7]这种写法没必要,直接写_、17就行;
    • [.]虽然能匹配.,但你要的是“扩展名不限”,后面的\w+[.]\w+只能匹配类似abc.txt的格式,没法处理像abc.txt - Copy(2)这种带额外字符的文件名,应该改成.*来匹配17之后的所有内容;
    • 另外,用\w{2}代替\w\w、\w{4}代替\w\w\w\w,可读性会更好。
      正确的正则应该是r'^\w{2}_\w{4}17.*',完美对应你要的??_????17*.*规则。
  2. 传参错误导致核心报错
    你调用matching函数时传了testfolder(这是一个文件名列表),但re.search只能处理单个字符串,这就是你看到报错的直接原因——把列表塞给了需要字符串的函数。

  3. 循环逻辑完全走不通
    for item in testfolder.index(matching)这行完全不符合Python语法:

    • testfolder.index()要传具体的文件名,不能传函数;
    • 就算能拿到索引,item是数字不是文件名;
    • 后面的item.name(matching, s)更是无稽之谈,字符串根本没有name方法。
  4. 匹配函数的设计不符合需求
    你需要的是判断文件名是否符合规则,所以函数应该返回True/False,而不是返回“Files don't exist!”这种字符串,不然没法用来做删除判断。


修复后的完整代码

我给你写了一个清晰的版本,加了注释方便理解:

import os
import re

# 目标文件夹路径
dir_name = "/Python/Test_folder"
# 匹配规则的正则表达式,完全对应你的需求
pattern = r'^\w{2}_\w{4}17.*'

# 获取文件夹内所有条目(文件+文件夹)
folder_items = os.listdir(dir_name)

def is_file_matching(filename):
    # 判断单个文件名是否符合规则,返回布尔值
    return re.match(pattern, filename) is not None

# 遍历每个条目
for item in folder_items:
    # 拼接完整路径
    full_path = os.path.join(dir_name, item)
    # 确保是文件(不是文件夹)且符合规则,再删除
    if os.path.isfile(full_path) and is_file_matching(item):
        os.remove(full_path)
        print(f"已成功删除:{item}")

额外小提示

  • 用re.match代替re.search,因为我们需要从文件名开头就匹配规则,避免误删中间包含??_????17的文件名;
  • 加了os.path.isfile判断,防止不小心删除文件夹;
  • 打印删除日志,方便你确认哪些文件被处理了。

内容的提问来源于stack exchange,提问作者Alexander Larionov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:40:08