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

Maximo环境Jython2.7.1无额外依赖存储可读类表格数据咨询

问题描述

我使用的商用现货(COTS)系统为IBM Maximo Asset Management 7.6.1.2,支持编写Python脚本,该系统存在如下限制:

  • Python版本为2.7.1,实际是Jython而非原生Python
  • 无法导入第三方Python库,仅能使用部分标准库
  • 无法在服务器存储CSV、文本等文件
  • 无法在数据库中创建自定义表

我需要在Python脚本中存储如下类表格数据,后续将编写Python函数实现类似数据库表的数据查询能力:

表名:DIVISION_SETTINGS

DIVISION    FLOW_CONTROL_REQ    ACTUAL_COSTS_REQ    SETTING3    SETTING4   SETTING5
FLEET       1                   1                   0           1          A
ROADS       0                   1                   0           2          B
PARKS       0                   1                   1           3          C
DIV4        1                   0                   0           4          D
DIV5        0                   0                   0           5          E
DIV6        0                   1                   1           6          F
DIV7        0                   1                   0           7          G

我查阅Python文档后发现列表、collections等内置结构存储的数据可读性较差,希望采用人类易读的列式格式存储数据,方便IT人员直接在脚本中修改值、降低出错概率。
请问在不额外引入库、不使用文件、不使用数据库表的前提下,Python 2.7.1中有没有实现上述需求的方案?


可行实现方案

以下两种方案均完全基于Python 2.7内置语法实现,无需引入第三方库、无需读写文件、无需操作自定义数据表,同时满足高可读性要求。

方案1:硬编码类表格字符串+极简解析(最推荐,修改成本最低)

直接在脚本中写入和原生表格格式完全一致的多行字符串,运维人员修改配置时无需了解Python数据结构,直接对齐修改数值即可。

# 配置表格直接按原生格式写,可读性拉满,修改时直接改对应位置的值即可
DIVISION_SETTINGS_RAW = '''
DIVISION    FLOW_CONTROL_REQ    ACTUAL_COSTS_REQ    SETTING3    SETTING4   SETTING5
FLEET       1                   1                   0           1          A
ROADS       0                   1                   0           2          B
PARKS       0                   1                   1           3          C
DIV4        1                   0                   0           4          D
DIV5        0                   0                   0           5          E
DIV6        0                   1                   1           6          F
DIV7        0                   1                   0           7          G
'''

# 极简解析逻辑,仅用内置字符串操作,无需依赖任何标准库
def parse_table(raw_str):
    lines = [line.strip() for line in raw_str.split('\n') if line.strip()]
    # 第一行是字段名
    fields = lines[0].split()
    # 后续行是数据
    table_data = []
    for line in lines[1:]:
        values = line.split()
        # 可根据需要自行转换字段类型,比如数字转int
        row = dict(zip(fields, values))
        row['FLOW_CONTROL_REQ'] = int(row['FLOW_CONTROL_REQ'])
        row['ACTUAL_COSTS_REQ'] = int(row['ACTUAL_COSTS_REQ'])
        row['SETTING3'] = int(row['SETTING3'])
        row['SETTING4'] = int(row['SETTING4'])
        table_data.append(row)
    return table_data

DIVISION_SETTINGS = parse_table(DIVISION_SETTINGS_RAW)

# 查询示例:按部门查配置
def get_setting_by_division(division):
    for row in DIVISION_SETTINGS:
        if row['DIVISION'] == division:
            return row
    return None

# 查询示例:按多条件筛选
def filter_settings(**conditions):
    result = []
    for row in DIVISION_SETTINGS:
        match = True
        for k, v in conditions.items():
            if row.get(k) != v:
                match = False
                break
        if match:
            result.append(row)
    return result

方案2:namedtuple结构化存储(无解析逻辑,直接使用)

如果不需要频繁修改配置,可使用Python 2.7标准库自带的collections.namedtuple实现结构化存储,字段含义一目了然:

from collections import namedtuple

# 定义行结构
DivisionSetting = namedtuple('DivisionSetting', 
    ['DIVISION', 'FLOW_CONTROL_REQ', 'ACTUAL_COSTS_REQ', 'SETTING3', 'SETTING4', 'SETTING5'])

DIVISION_SETTINGS = [
    DivisionSetting('FLEET', 1, 1, 0, 1, 'A'),
    DivisionSetting('ROADS', 0, 1, 0, 2, 'B'),
    DivisionSetting('PARKS', 0, 1, 1, 3, 'C'),
    DivisionSetting('DIV4',  1, 0, 0, 4, 'D'),
    DivisionSetting('DIV5',  0, 0, 0, 5, 'E'),
    DivisionSetting('DIV6',  0, 1, 1, 6, 'F'),
    DivisionSetting('DIV7',  0, 1, 0, 7, 'G'),
]

# 查询时可直接通过属性取值,比如row.FLOW_CONTROL_REQ

两种方案都兼容Jython 2.7.1运行环境,适配Maximo系统的所有限制要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:18:04