如何解决从原始文本文件动态创建 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
我的硬编码:
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 举报,一经查实,本站将立刻删除。