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

2024-04-23 12:19:51 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,谢谢你的阅读。我承认,这是我之前提出的一个问题的发展,在我部分解决了这个问题之后。我正在尝试在以前的工作函数中处理一个文本块(file\u object)。文本或文件对象碰巧是Unicode格式的,但我已经成功地转换为ascii文本并逐行拆分。我希望进一步拆分“=”符号上的文本,以便将文本放入词典。例如,Key:Value为“GPS Time”:“14:18:43”,因此从时间中删除尾随的“.000”(尽管这是第二个问题)。你知道吗

这是文件对象格式

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时间”,但它忽略了纬度、纬度等,更糟的是,有时每个数据包项目之间也有一个空行。我想我需要在“return”之前存储以前与词典相关的拆分,但是我很难找到如何做到这一点。你知道吗

我现在得到的dict输出是

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

提前谢谢你的帮助。你知道吗

米克


Tags: 文件对象函数in文本fordataobject
1条回答
网友
1楼 · 发布于 2024-04-23 12:19:51

所有这些range(len(whatever))的使用都是无稽之谈。在Python中几乎不需要这样做。只需重复一遍。你知道吗

然而,您的问题更为根本:您从while循环内部返回。这意味着您只能得到一个元素,因为只要处理完第一行,就返回,函数就结束了。你知道吗

此外,您还有一个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

相关问题 更多 >