使用 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
您好,感谢阅读。我承认这是在我部分解决了这个问题之后,我之前提出的上一个问题的进展。我正在尝试在较早的工作函数中处理一段文本 (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