python - 解析反斜杠分隔的层次结构路径(不同的级别数)

标签 python python-2.7 maximo

我有不同级别数(最多 4 级)的层次结构路径:

FACILITIES \ PARK
ROADS \ GRASS/TURF BLVD MAINTENANCE
ROADS \ SIDEWALKS \ REPLACEMENT
FACILITIES \ PARKING - MAIN ST
RECREATION \ BANDSHELL \ PROPERTY \ BUILDING-GENERAL
FACILITIES \ FIREHALL \ PLUMBING
FACILITIES

我想解析 _\_ 分隔符处的级别并将值插入 Maximo 数据库列中:

  • WOEQ1
  • WOEQ2
  • WOEQ3
  • WOEQ4

(这些列的长度现在只有 10。稍后我将创建长度更长的适当的自定义列。)


我尝试过的:

我已经弄清楚如何解析级别并将值插入到列中 - IF(这是一个很大的 IF)总是有 4 个级别:

#Auto-script on WORKORDER
h = mbo.getString("HIERARCHYPATH")
mbo.setValue("WOEQ1", (h.split(' \\ '))[0][:10])
mbo.setValue("WOEQ2", (h.split(' \\ '))[1][:10])
mbo.setValue("WOEQ3", (h.split(' \\ '))[2][:10])
mbo.setValue("WOEQ4", (h.split(' \\ '))[3][:10])

但是当然,我不会总是有 4 个级别。我可以有 1-4 之间的任意数量的级别。


如何解析反斜杠分隔的层次结构路径(具有不同的级别数)?

最佳答案

您可以让“正常”拆分来划分行

>>> s = """\
... FACILITIES \ PARK
... ROADS \ GRASS/TURF BLVD MAINTENANCE
... ROADS \ SIDEWALKS \ REPLACEMENT
... FACILITIES \ PARKING - MAIN ST
... RECREATION \ BANDSHELL \ PROPERTY \ BUILDING-GENERAL
... FACILITIES \ FIREHALL \ PLUMBING
... FACILITIES
... """
>>> for row in s.splitlines():
...    print(row.split(" \\ "))
...
['FACILITIES', 'PARK']
['ROADS', 'GRASS/TURF BLVD MAINTENANCE']
['ROADS', 'SIDEWALKS', 'REPLACEMENT']
['FACILITIES', 'PARKING - MAIN ST']
['RECREATION', 'BANDSHELL', 'PROPERTY', 'BUILDING-GENERAL']
['FACILITIES', 'FIREHALL', 'PLUMBING']
['FACILITIES']

然后您可以迭代返回的列表,设置每个值

max_col_length = 10  # to be updated by author
for row in s.splitlines():
    for index, atom in enumerate(row.split(" \\ "), 1):  # count from 1
        mbo = "create a new row"  # not shown by author
        mbo.setValue("WOEQ{}".format(index), atom[:max_col_length])
    "INSERT row if processing rows individually"
"INSERT all rows if able to upload them all at the same time"

如果您需要始终在列表中提供至少 4 个(或 N)个成员,您可以使用 itertools.repeat 填写剩余的值

>>> import itertools
>>> mylist = ['RECREATION', 'BANDSHELL', 'PROPERTY']
>>> mylist.extend(list(itertools.repeat(None, 4 - len(mylist))))
>>> print(mylist)
['RECREATION', 'BANDSHELL', 'PROPERTY', None]

关于python - 解析反斜杠分隔的层次结构路径(不同的级别数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64504579/

相关文章:

java - 如何将两个日期之间的(大)差异添加到另一个日期

python - 如何将 Django 对象发送到 celery 任务?

python - 导入错误 : No module named scipy

python-2.7 - 图形工具 -> Networkx

formula - 使用自定义公式函数/自动化脚本的 Maximo 公式?

python - PyCharm 社区 3.1.1 和 Numpy, "' 矩阵'不可调用”,但代码有效

python - 返回并删除元组键包含给定元素的所有键值对

python - 为什么 pandas 中使用的函数行为会发生变化?

python - Google Cloud Datastore 'NoneType' 对象没有属性 'email'