使用 Python 将 Unicode 文件对象拆分为字典键和值

Using Python to split a Unicode file object into dictionary Keys and values

您好,感谢阅读。我承认这是在我部分解决了这个问题之后,我之前提出的上一个问题的进展。我正在尝试在较早的工作函数中处理一段文本 (file_object)。文本或 file_object 恰好是 Unicode,但我设法转换为 ascii 文本并逐行拆分。然后我希望进一步拆分“=”符号上的文本,以便我可以将文本放入字典中。例如 Key: Value as ‘GPS Time’:’ 14:18:43’ 所以从时间中删除尾随的‘.000’(尽管这是第二个问题)。

这是 file_object 格式……

2015 Jan 01  20:07:16.047 GPS Info  #Log packet ID

GPS Time = 14:18:43.000 

Longitude = 000.65341

Latitude = +41.25385

Altitude = +111.400

这是我的部分功能…

def process_data(file_object):
    file_object = file_object.encode('ascii','ignore')
    split = file_object.split('\n')

    for i in range(len(split)):  
        while '=' in split[i]:
            processed_data = (split[i].split('=', 1) for _ in xrange(len(split)))
            return {k.strip(): v.strip() for k, v in processed_data}

这是提示上述功能的主脚本的初始部分,然后将GPS时​​间设置为字典键...

while (mypkt.Next()):  #mypkt.Next is an API function in the log processor app I am using – essentially it grabs the whole GPS Info packet shown above
    data = process_data(mypkt.Text, 1)
    packets[data['GPS Time']] = data

上面的代码拆分第一个实例'GPS Time'没有问题,但是它忽略了经度,纬度等,更糟糕的是,有时每个数据包项之间也会有一个空行。我想我需要在“return”之前存储以前与字典相关的拆分,但我很难找到如何做到这一点。

我目前得到的字典输出是……

'14:19:09.000': {'GPS Time': '14:19:09.000'},

但我希望的是……

'14:19:09': {'GPS Time': '14:19:09',
                ‘Longitude’:’000.65341’,
                ‘Latitude’:’+41.25385’,
                ‘Altitude’:’+111.400’},

在此先感谢您的帮助。

米克格

range(len(whatever)) 的所有这些用法都是胡说八道。在 Python 中,您几乎不需要这样做。只是遍历这个东西。

然而,您的问题更为根本:您 return 来自 while 循环内部。这意味着您只能获得一个元素,因为一旦处理完第一行,您就 return 并且函数结束。

此外,您有一个 while 循环,这意味着只要程序遇到没有等号的行,处理就会结束;但是每条数据行之间都有空行,因此执行将永远不会超过第一行。

所以你只需要:

split_data = file_object.split('\n')
result = {}
for line in split_data:
    if '=' in line:
        key, value = line.split('=', 1)
        result[key.strip()] = value.strip()
return result