为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

陪伴而非守候 2023-12-26 16:41:45
我有不同级别数(最多 4 级)的层次结构路径:FACILITIES \ PARKROADS \ GRASS/TURF BLVD MAINTENANCEROADS \ SIDEWALKS \ REPLACEMENTFACILITIES \ PARKING - MAIN STRECREATION \ BANDSHELL \ PROPERTY \ BUILDING-GENERALFACILITIES \ FIREHALL \ PLUMBINGFACILITIES我想解析_\_分隔符处的级别并将值插入 Maximo 数据库列中:WOEQ1WOEQ2WOEQ3WOEQ4(这些列的长度现在只有 10。稍后我将创建长度更长的适当的自定义列。)我尝试过的:我已经弄清楚如何解析级别并将值插入到列中 - IF(这是一个很大的 IF)总是有 4 个级别:#Auto-script on WORKORDERh = 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 之间任意数量的级别。如何解析反斜杠分隔的层次结构路径(具有不同的级别数)?
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

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


>>> 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]


查看完整回答
反对 回复 2023-12-26
?
守着一只汪

TA贡献1872条经验 获得超3个赞

这是我最终使用的脚本(它是 @ti7 答案的变体)。


在新的层次结构路径少于四个级别的情况下,脚本会将现有值清空。


parts = s.split(r' \ ')

for i, part in enumerate(parts, 1):

    mbo.setValue(col_prefix + str(i), part)

for i in range(len(parts)+1, 5):

    mbo.setValueNull(col_prefix + str(i))


查看完整回答
反对 回复 2023-12-26
  • 2 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信