从原始文本文件动态创建 JSON 键和值

如何解决从原始文本文件动态创建 JSON 键和值

我正在尝试制作一个程序,允许用户将其原始文件动态格式化为 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

插图:

enter image description here

我的硬编码:

    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'
}



解决方法

如果我对您问题的理解是正确的,那么您实际上并不需要正则表达式。你需要一个叫做 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)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?