【问题标题】:Reading a block of text from a txt file in python between two identical strings从两个相同字符串之间的python中的txt文件中读取一个文本块
【发布时间】:2014-01-17 13:20:55
【问题描述】:
    self.viewerData = []
    tempViewerData = []
    tempViewer = []
    started = False
    with open("tittardata.txt", "r") as fp:
        for i, line in enumerate(fp.readlines()):
            if line.startswith("=="):
                started = True
                continue
            if started and line.startswith("--"):
                started = False
            if started == True:
                tempViewerData.append(line.rstrip("\n"))

我正在尝试从下面的 txt 文件中读取两端用“---”分隔的块。 在第一个块上,分隔由不同的符号处理,以“===”开头,以“--”结尾。即将到来的块由相同的符号解析,使得提取块更加困难。这是我迄今为止的尝试,感谢所有帮助。

这是文本文件的摘录:

=================
19.37/2
19.52/2
21.07/1
21.22/1
21.37/1
-------
19.37/2
19.52/2
-------

【问题讨论】:

    标签: python python-3.x io readlines


    【解决方案1】:

    使用一个生成器,它可以有效地将仅包含 =- 的行变为空白,然后按非空白数据分组,例如:

    from itertools import groupby
    
    with open('your_file') as fin:
        lines = (line.strip('-=\n') for line in fin)
        blocks = [list(g) for k, g in groupby(lines, bool) if k]
        # [['19.37/2', '19.52/2', '21.07/1', '21.22/1', '21.37/1'], ['19.37/2', '19.52/2']]
    

    如果您一次不需要所有数据,则将 blocks 改为生成器并循环遍历它....

    blocks = (list(g) for k, g in groupby(lines, bool) if k)
    for block in blocks:
        # do something
    

    【讨论】:

      【解决方案2】:
      blocks = []
      block = []
      
      for line in f:
          if line[:3] in ('===', '---'):
              # don't record empty blocks, avoids empty block at start
              if block:
                  blocks.append(block)
                  block = []
          else:
              block.append(line.rstrip('\n'))
      # needed if last block is not bounded by separator
      if block:
          blocks.append(block)
      

      【讨论】:

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