【问题标题】:How do I grab text from a file using python regex如何使用 python 正则表达式从文件中获取文本
【发布时间】:2015-04-19 00:54:49
【问题描述】:

我有一个大文本文件,其中包含一长块 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': 之后的值的每个实例以及 u'latitude' : 之后的值。该文档包含大约 1000 次重复的行,每次都有不同的值。

在此先感谢您提供的任何帮助或向正确方向轻推的帮助。

【问题讨论】:

  • 以上是真文还是字典?

标签: python regex gps lxml gpx


【解决方案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 会对此有所帮助。

【讨论】:

  • 解析成json格式可以快速轻松地完成工作
【解决方案2】:
(?<=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)

如果文件不大,您可以一口气阅读并应用此正则表达式,否则您可以逐行阅读并应用正则表达式并将结果追加到列表或字典中。

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多