【问题标题】:How to iterate over strings after newline?如何在换行符后迭代字符串?
【发布时间】:2019-07-24 15:38:47
【问题描述】:

我正在尝试将这些句子相互比较。例如,我想看看BEFORE 是否与BEFORE THE 相同,这显然不是。但是,问题是我试图循环换行,所以

BEFORE THE PARLIAMENT ON BRITAIN'S RELATIONS 只会出现在一个字符串中。下面是一个示例文件。

BEFORE

BEFORE THE

BEFORE THE PARLIAMENT

BEFORE THE PARLIAMENT ON

BEFORE THE PARLIAMENT ON
BRITAIN'S

BEFORE THE PARLIAMENT ON
BRITAIN'S RELATIONS

BEFORE THE PARLIAMENT ON
BRITAIN'S RELATIONS WITH

我现在的做法是遍历每一行。因此,当句子超过一行时,它会拆分所有内容。

with open("test.txt") as f:
    data = f.readlines()
    data = [d.strip().split('\n') for d in data]

我怎样才能遍历这个文件,并一个接一个地获取每个句子,而不是遍历每一行?

【问题讨论】:

  • 有点困惑。你有一个包含这些行的文件,对吗?您可以通过跟踪空行来描述句子。当有空行时,就是上一句的结尾。
  • 您可以使用文档Itertools Recipes 中显示的pairwise() 函数。

标签: python python-3.x python-2.7 list newline


【解决方案1】:
with open("test.txt") as f:
    text = f.read()
    for line in text.split("\n\n"):
        line = line.replace("\n", " ")
        print(line)

我想这就是你想要的。你可以用双换行符分割,然后用空格替换换行符。

输出:

BEFORE
BEFORE THE
BEFORE THE PARLIAMENT
BEFORE THE PARLIAMENT ON
BEFORE THE PARLIAMENT ON BRITAIN'S
BEFORE THE PARLIAMENT ON BRITAIN'S RELATIONS
BEFORE THE PARLIAMENT ON BRITAIN'S RELATIONS WITH

【讨论】:

    【解决方案2】:

    在双换行符上进行拆分,例如:

    with open("test.txt") as f:
        data = f.read()
        data = [d.strip().split('\n\n') for d in data]
    

    【讨论】:

      【解决方案3】:

      你可以用双换行符分割:

      data = f.read().split('\n\n')
      

      但是,您必须确保空行不包含任何字符(空格)。

      【讨论】:

        【解决方案4】:

        使用itertools.groupby 的一个版本。这适用于句子之间的任意数量的换行符:

        from itertools import groupby
        
        with open('file.txt', 'r') as f_in:
            txt = f_in.read()
        
        out = []
        for v, g in groupby(txt.splitlines(), lambda k: k != ''):
            if v:
                out.append(' '.join(g))
        
        
        from pprint import pprint
        pprint(out)
        

        打印:

        ['BEFORE',
         'BEFORE THE',
         'BEFORE THE PARLIAMENT',
         'BEFORE THE PARLIAMENT ON',
         "BEFORE THE PARLIAMENT ON BRITAIN'S",
         "BEFORE THE PARLIAMENT ON BRITAIN'S RELATIONS",
         "BEFORE THE PARLIAMENT ON BRITAIN'S RELATIONS WITH"]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-15
          • 1970-01-01
          • 2019-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-23
          相关资源
          最近更新 更多