亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解析反斜杠分隔的層次結構路徑(不同的級別數)

解析反斜杠分隔的層次結構路徑(不同的級別數)

陪伴而非守候 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個贊

您可以讓“正?!辈鸱謥韯澐中?/p>


>>> 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條經驗 獲得超4個贊

這是我最終使用的腳本(它是 @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 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號