我有一个大文本文件,其中包含一个长的GPS信息块,我编写了一个python脚本,它采用坐标并将它们插入到xml文件中,我只需要函数循环文件并提取坐标。
该文件由以下文本
组成{u'bearing': 0, u'altitude': 0, u'time': 1423728072412L, u'longitude': -118.38120859999991, u'provider': u'network', u'latitude': 34.052508400000001, u'speed': 0, u'accuracy': 20}{u'bearing': 0, u'altitude': 0, u'time': 1423728072412L, u'longitude': -118.38120859999992, u'provider': u'network', u'latitude': 34.052508400000001, u'speed': 0, u'accuracy': 20}
我想使用某种正则表达式,它允许我在u'longitude之后找到并获取值的每个实例:和'uitudeat'之后的值:。该文档包含约1000次重复行,每次都有不同的值。
提前感谢任何帮助或推动正确的方向。
答案 0 :(得分:1)
您可以将ast.literal_eval()
应用于文件中的每一行,并从结果字典中获取longitude
值:
from ast import literal_eval
with open('input.txt') as f:
for line in f:
d = literal_eval(line)
print d['longitude']
作为旁注,请考虑将数据序列化为JSON format,而不是将字典转储到文本文件中。 json
module会对此有所帮助。
答案 1 :(得分:0)
(?<=longitude':)\s*([^,}]*)|(?<=latitude':)\s*([^,}]*)
试试这个。看看演示。
https://regex101.com/r/jG2wO4/3
import re
p = re.compile(r'(?<=longitude\':)\s*([^,}]*)|(?<=latitude\':)\s*([^,}]*)')
test_str = "{u'bearing': 0, u'altitude': 0, u'time': 1423728072412L, u'longitude': -118.38120859999991, u'provider': u'network', u'latitude': 34.052508400000001, u'speed': 0, u'accuracy': 20}{u'bearing': 0, u'altitude': 0, u'time': 1423728072412L, u'longitude': -118.38120859999992, u'provider': u'network', u'latitude': 34.052508400000001, u'speed': 0, u'accuracy': 20}"
re.findall(p, test_str)
如果文件不大,您可以一次阅读并应用此正则表达式,否则您可以逐行阅读并应用正则表达式并继续将结果附加到列表或字典中。