第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

是否有用于在 Python 中解析此類序列化對象的庫?

是否有用于在 Python 中解析此類序列化對象的庫?

守著星空守著你 2023-02-07 14:25:52
對于我的 python 程序,我有一個表示序列化對象的輸入,它可以包含原始類型、數(shù)組和結(jié)構(gòu)。示例輸入可能如下所示:Struct(1.5, false, Struct2(“text”), [1, 2, 3])樣本輸出將是:{    type: "Struct",    args: [        1.5,        False,        {            type: "Struct2",            args: [ "text" ]        },        [ 1, 2, 3 ]    ]}所以,輸入字符串可以有:原始類型(整數(shù)、浮點(diǎn)數(shù)、布爾值和字符串文字)數(shù)組結(jié)構(gòu)(結(jié)構(gòu)名稱和參數(shù)列表)輸入格式非常合乎邏輯,但我找不到任何現(xiàn)成的庫/代碼片段來解析這種格式。
查看完整描述

1 回答

?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊

這不是一個非常干凈的實(shí)現(xiàn),我不能 100% 確定它是否完全符合您的要求,但我建議使用Lark庫來執(zhí)行此操作。


與其使用現(xiàn)成的解析器來完成這項(xiàng)工作,不如自己做一個小解析器,為了節(jié)省時間,Lark 具有“保存”和“加載”功能,因此您可以保存序列化版本的解析器并加載每個解析器時間而不是在每個運(yùn)行時重新創(chuàng)建整個解析器。希望這可以幫助 :)


from lark import Lark, Transformer


grammar = """

%import common.WS

%import common.ESCAPED_STRING

%import common.SIGNED_NUMBER


%ignore WS


start : struct


struct  : NAME "(" [element ("," element)*] ")"

element : struct | array | primitive


array : "[" [element ("," element)*] "]"

primitive : number

          | string

          | boolean


string : ESCAPED_STRING

number : SIGNED_NUMBER


boolean : TRUE | FALSE


NAME : /[a-zA-Z][a-zA-Z0-9]*/


TRUE : "true"

FALSE : "false"

"""


class T(Transformer):

    def start(self, s):

        return s[0]


    def string(self, s):

        return s[0][1:-1].replace('\\"', '"')


    def primitive(self, s):

        return s[0]


    def struct(self, s):

        return { "type": s[0].value, "args": s[1:] }


    def boolean(self, s):

        return s[0].value == "true"


    def element(self, s):

        return s[0]

    

    array = list


    def number(self, s):

        try:

            return int(s[0].value)

        except:

            return float(s[0].value)


parser = Lark(grammar, parser = "lalr", transformer = T())


test = """

Struct(1.5, false, Struct2("text"), [1, 2, 3])

"""


print(parser.parse(test))



查看完整回答
反對 回復(fù) 2023-02-07
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號