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

Python按id=行模式排序文件 正则匹配报AttributeError解决

问题描述

现有包含如下内容的枚举类文件:

enum class Fruits(id: String) {
   BANANA(id = "banana"),
   LEMON(id = "lemon"),
   DRAGON_FRUIT(id = "dragonFruit"),
   APPLE(id = "apple"); }

需求为按照id = 对应的取值对文件内的枚举条目行排序,再用排序后的新行替换原有对应行内容。

编写Python脚本实现时,正则匹配目标行模式失败,运行抛出AttributeError: 'NoneType' object has no attribute 'group'错误,无法完成排序逻辑,原有错误脚本如下:

import re

fruitsFile = '/home/genericpath/Fruits.txt'

def sortFruitIds():

# this is an attempt to get/find the pattern, but it return an AttributeError: 
# 'NoneType' object has no attribute 'group'

    with open(fruitsFile, "r+") as f:
        lines = sorted(f, key=lambda line: str(re.search(r"(?<=id = )\s+", line)))
        for line in lines:
            f.write(line)
原有代码问题
  • 正则规则错误:原正则(?<=id = )\s+仅匹配id = 后的空白字符,没有捕获引号内的实际id值;同时类定义行、结尾闭合行不存在id = 字段,正则匹配结果为None,直接用于排序会触发异常
  • 文件操作逻辑错误:使用r+模式打开文件后未清空原有内容,直接写入排序后的内容会导致文件内容重复、结构错乱
  • 排序范围错误:没有区分枚举条目行和类定义、闭合行,会将非枚举条目行也纳入排序,破坏枚举类的基础结构
修复后实现
import re

fruitsFile = '/home/genericpath/Fruits.txt'

def sortFruitIds():
    # 匹配id = 后双引号包裹的实际取值
    id_extract_pattern = re.compile(r'id\s*=\s*"([^"]+)"')
    header = ""
    enum_items = []
    footer = ""

    # 读取文件拆分结构
    with open(fruitsFile, "r", encoding="utf-8") as f:
        all_lines = [line.rstrip("\n") for line in f if line.strip()]
        header = all_lines[0]
        footer = all_lines[-1]
        enum_items = all_lines[1:-1]

    # 按id值对枚举条目排序
    enum_items.sort(key=lambda line: id_extract_pattern.search(line).group(1))

    # 拼接内容写回文件
    final_content = [header] + enum_items + [footer]
    with open(fruitsFile, "w", encoding="utf-8") as f:
        f.write("\n".join(final_content) + "\n")

if __name__ == "__main__":
    sortFruitIds()

运行脚本后,文件内枚举会按id字段的字母序排序,结果如下:

enum class Fruits(id: String) {
   APPLE(id = "apple"),
   BANANA(id = "banana"),
   DRAGON_FRUIT(id = "dragonFruit"),
   LEMON(id = "lemon"); }

内容的提问来源于stack exchange,提问作者Lucas Fernandes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:51:21