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

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

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

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

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

1 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

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


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


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



查看完整回答
反對 回復 2023-02-07
  • 1 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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