2017-07-15 72 views
1

我想将文件转换为json。 文件的格式为:python - 从txt文件到字典和json

Temp=24.0* Humidity=41.0% Date=02/01/17-20:37 
Temp=24.0* Humidity=42.0% Date=02/01/17-20:38 
Temp=24.0* Humidity=42.0% Date=02/01/17-20:39 

我用下面的代码:

list = {} 
with open("record.txt") as f: 
    for line in f: 
    if not ("Failed" in line): 
     lists = line.split(" ") 
     for l in lists: 
     ll = dict([l.split("=")]) 
     // print(json.dumps(ll)) 
     list.update(ll) 

当我打印字典创建我得到。

>>> print (list) 
{'Temp': '29.0*', 'Humidity': '31.0%', 'Date': '15/07/17-10:56\n', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Temp': '21.0*'} 

我不明白为什么。有谁知道我为什么没有收到整本字典?

在转换为json之前,我还将用新行/n分隔到子字典。这可能吗?

+1

您正在重写每次迭代中的值。 – badiya

回答

1

输入文件包含相同的组唯一密钥如此三次Python中的相应表示,其然后可以被序列化到JSON,是字典的阵列。

试试这个改变了代码: list = [] with open("record.txt") as f: for line in f: if not ("Failed" in line): lists = line.rstrip().split(" ") ll = {} for l in lists: k,v = l.split("=") ll[k] = v list.append(ll)

如果你再这样做: print list

你应该得到: print list [{'Date': '02/01/17-20:37', 'Temp': '24.0*', 'Humidity': '41.0%'}, {'Date': '02/01/17-20:38', 'Temp': '24.0*', 'Humidity': '42.0%'}, {'Date': '02/01/17-20:39', 'Temp': '24.0*', 'Humidity': '42.0%'}]

然后你可以转储到JSON有: import json json.dumps(list) '[{"Date": "02/01/17-20:37", "Temp": "24.0*", "Humidity": "41.0%"}, {"Date": "02/01/17-20:38", "Temp": "24.0*", "Humidity": "42.0%"}, {"Date": "02/01/17-20:39", "Temp": "24.0*", "Humidity": "42.0%"}]'

+0

正是我想要做的,谢谢! –

0

你可以创建一个这样的字典列表,然后可以做任何你想做的修改。

list = {} 
complete_list=[] 
with open("record.txt") as f: 
    for line in f: 
    if not ("Failed" in line): 
     lists = line.split(" ") 
     lists[-1] = lists[-1].strip()  #it should remove the \n at the end. 
     for l in lists: 
     ll = dict([l.split("=")]) 
     // print(json.dumps(ll)) 
     list.update(ll) 
     complete_list.append(list)