【问题标题】:Extracting information between strings in a text file [closed]在文本文件中的字符串之间提取信息[关闭]
【发布时间】:2015-04-12 19:46:21
【问题描述】:

我有一个结构如下的数据文件:

handle:trial1

key_left:3172

key_up:

xcoords:12,12,12,15........

ycoords:200,200,206,210,210......

t:20,140,270,390.....

goalx:2

goaly:12

fractal:images/file.png

seen:true

pauseTimes:

fractal:images/file2.png

seen:False

pauseTimes:

...
...

我只想提取goaly 行之后的信息,直到pauseTimes 行。如果我知道所有试验的goaly 值,我可以指定该行并在goaly:pauseTimes 之间提取数据,但我不会提前知道任何goaly 的值是什么,因为它们是动态的生成。

如何使用字符串"goaly" 来标识该行,然后提取所有后续行直到pauseTimes 行?

【问题讨论】:

  • 你有没有尝试过?这在 python 中应该是一个相当常规的任务。如果您发布代码示例,我们可以帮助您解决问题。
  • 我做到了,我使用的是 line.strip() 但这需要(我相信)该行的确切内容。使用 line.startswith 应该可以解决问题。如果我有其他问题,我会在自定义代码后恢复!谢谢。

标签: python string text extract


【解决方案1】:

无论您是否关心线路,您都可以使用状态变量进行循环和跟踪。我喜欢使用生成器跟踪这样的解析状态,以使其与处理代码分开。对于您的示例,这里是生成器:

def parse(infile):
    returning = False
    trial = None
    for line in infile:
        line = line.rstrip()
        if not line:
            continue

        if line.startswith('handle:'):
            trial = line[len('handle:'):]

        if line.startswith('goaly:'):
            returning = True
        elif line.startswith('pauseTimes:'):
            returning = False

        if returning:
            yield trial, line

下面是你将如何使用它:

for trial, line in parse(open('test.txt', 'r')):
    print(trial, line)

具有跟踪您正在进行的试验的奖励功能。

【讨论】:

  • 这非常感谢,而且很有启发性,作为一个或多或少的初学者,我很感激。
  • 还有一个菜鸟问题——如何将 print(trial, line) 的输出保存到变量中?使用另一个循环?提前致谢。
  • 我的初学者尝试是 new_data = parse(infile) 但这不起作用。
【解决方案2】:
extracting = False
with open('path/to/file') as f:
    for line in f:
        if line.startswith('goaly:'):
            extracting = True
        if extracting:
            # I'm not really sure how you want to receive this
            # data, but that's what would go here....
        if line.startswith('pauseTimes:'):
            extracting = False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多