【问题标题】:Create JSON key&value dynamically from raw text file从原始文本文件动态创建 JSON 键和值
【发布时间】:2021-05-25 11:35:48
【问题描述】:

我正在尝试制作一个允许用户将其原始文件动态格式化为 JSON 格式的程序。 目前,我设法使用硬编码的值/索引将文本文件制作为 JSON 格式。但我想要的是让用户创建自己的值并将某些字符串从原始文件中提取为 json 格式。让用户自定义自己的键和值进行转换 有没有办法实现我的目标?可以用 ReGex 完成吗? 场景:用户上传他们的文本文件,他们可以选择要存储的密钥和字符串,然后转换为 json 格式

我要提取的示例文件: 其他用户也可以上传其他文件

13-May-2020 14:19:14;176039082005130240000000  SYNC RotaryRight_1002110 MeasureATI;RotKnob_EMERGENCY-EXIT
13-May-2020 14:19:29;176039082005130240000000  SYNC RotaryRight_1003010 Start Communication_ERROR:Key in Position 'MANUAL'
13-May-2020 14:19:29;176039082005130240000000  SYNC RotaryLeft_1002010 Start Communication_ERROR:Key in Position 'MANUAL'
13-May-2020 14:31:18;176039082005130321000000  SYNC RotaryRight_1002110 MeasureATI;RotKnob_EMERGENCY-EXIT
13-May-2020 14:41:52;176039082005130291000000  SYNC RotaryRight_1002110 MeasureATI;RotKnob_EMERGENCY-EXIT
13-May-2020 14:49:58;176039082005130301000000  SYNC RotaryRight_1002110 MeasureATI;RotKnob_EMERGENCY-EXIT

插图:

我的硬编码代码:

    for content in data2:
        splitted_line = content.split(" ")
        print(splitted_line)
        file_data = {}
        file_data["Date"] = splitted_line[0]
        time_and_code = splitted_line[1].split(";")
        file_data["Time"] = time_and_code[0]
        file_data["Code"] = time_and_code[1]
        file_data["Status"] = splitted_line[3]
        file_data["Message"] = " ".join(splitted_line[4:])
        # output to JSON

        global tmp
        tmp = json.dumps(file_data, ensure_ascii=False, indent="\t")
        reviewjson.insert(END, tmp)

结果

{
'Date':  '13-May-2020',
'Time': ' 12:49:35',
'Code': ' 176036072005120136000000'
'Sync Status': 'SYNC'
' Message': ' RotaryRight_1001010 MOV P1 -> Park Position_BUSY'
}



【问题讨论】:

    标签: python json dynamic


    【解决方案1】:

    如果我对您的问题的理解是正确的,那么您实际上不需要正则表达式。你需要一个叫做list slice的东西。在你的情况下,你不会使用 split 。

    file_data["key1"] = content[0:10]
    file_data["key2"] = content[11:20]
    file_data["key3"] = content[25:] if content[20:24] == "SYNC" else ""
    

    允许用户输入

    number_of_keys = int(intput("Enter number of expected keys: "))
    st = "YOUR STRING TO PARSE TO DICT"
    result = {}
    for key_idx in range(number_of_keys):
        start_idx = int(input("Enter starting index: "))
        end_idx = int(input("Enter end index: "))
        key_name = input("Enter key name: ")
        result[key_name] = st[start_idx:end_idx]
    print(result)
    

    这是一个基本示例,但您可以在此基础上构建一些东西

    【讨论】:

    • 您好,感谢您的回复。但这是硬编码的吧?我需要的是让用户自定义要转换的自己的键和值
    • 你需要使用变量,例如从input读取。如果字符串的长度不同,则用户必须指定正则表达式,这可能应该避免。我将编辑答案,为第一种情况举一个例子
    • 谢谢! ,我会尝试使用你的方法。再次感谢赐教哈哈
    • 但是如果字符串的长度不同,那么应该改用正则表达式吗?
    • 是的,但是用户必须指定正则表达式。它没有那么简单,因为它必须处理异常
    猜你喜欢
    • 2021-07-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2013-08-07
    相关资源
    最近更新 更多