【问题标题】:Using Python to split a Unicode file object into dictionary Keys and values使用 Python 将 Unicode 文件对象拆分为字典键和值
【发布时间】:2015-03-03 10:57:38
【问题描述】:

您好,感谢您的阅读。在我部分解决了这个问题之后,我承认这是我之前提出的一个问题的进展。我正在尝试在早期的工作函数中处理一段文本(file_object)。 text 或 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 Time 设置为 Dictionary 键……

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时间”没有问题,但它忽略了经度、纬度等,更糟糕的是,有时每个数据包项之间也有一个空行。我想我需要在“返回”之前存储以前与字典相关的拆分,但我很难找出如何做到这一点。

我目前得到的 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’},

提前感谢您的帮助。

米克

【问题讨论】:

  • 每个文件是否有一条记录,即一条 GPS 信息记录,由 GPS 时间、经度、纬度和纬度 4 项组成,或者每个文件可以有多条?每个项目之间真的有空行吗?
  • 嗨,mhawke,GPS 数据包的实例不止一个,但是我尝试了下面 Daniel 的示例并设法让它工作。

标签: python dictionary unicode split


【解决方案1】:

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

【讨论】:

  • 嗨丹尼尔·罗斯曼,非常感谢!我已经尝试过了,这正是我想要完成的。非常感谢。
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2019-04-21
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多