在空行之间加入行 - python

Join lines between empty lines - python

我有一个文本文件中的行列表,我需要在其中连接连续的行并用空行与其他行分开。如果我尝试先清除空行然后通过偶数循环加入 em,我会得到错误的输出。

one
two

three
four
five

six

seven
eight

我正在尝试读取包含行的文件或列表以将上述内容打印为

one two

three four five

six

seven eight

列表如下所示'\n', '\n', '\n', 'EMM - Freedom\n', 'MrSuicideSheep\n', '\n',

编辑:

我确实在类似的问题中看到了相同的答案,但我正在尝试在我已经做过一些操作的列表中做那件事。正如我上面提到的,列表看起来像这样

['\n', '\n', '\n', 'EMM - Freedom\n', 'MrSuicideSheep\n', '\n']. 

为了获得我的预期输出,我需要从所有期望的单词中删除 \n,其中下一个项目为“\n”,稍后我可以剥离它以摆脱所有不必要的 n。现在我删除了所有句子中的所有\n',留下空行来分隔。所以它现在看起来像

['\n', '\n', '\n', 'EMM - Freedom', 'MrSuicideSheep', '\n'] 

现在我可能应该单独删除连续的 \n。大声笑抱歉让这复杂。顺便说一句,我实际上正在为此工作 git ,如果您有更好的解决方案,请在下面发表评论。

您可以将所有内容作为单个字符串读取 - file.read() - 然后您可以尝试在 "\n\n" 上拆分,这意味着空行。稍后您可以将字符串中的 "\n" 替换为 " "

如果空行中有空格或制表符,可能会出现问题。


例子

text = '''one
two

three
four
five

six

seven
eight'''

data = text.split('\n\n')
data = [text.replace('\n', ' ') for text in data]

print(data)

结果

['one two', 'three four five', 'six', 'seven eight']

编辑:

如果您必须使用列表,那么您可以连接列表中的所有字符串并使用以前的代码,但问题是 '\n', '\n', '\n'(或更多 \n)创建空行,它需要 regex 将所有 \n\n\n... 转换为 \n\n

你也可以使用这样的东西。它解决了 '\n', '\n', '\n' 的问题。

顺便说一句:我使用 io.StringIO 只是为了简单地用数据

模拟文件
text = '''one
two

three
four
five

six



seven
eight'''

import io

lines = io.StringIO(text).readlines()
print(lines)

results = []
row = []

for line in lines:
    line = line.rstrip()
    if line:
        #if not row:
        #    results.append('\n')
        row.append(line)
    else:
        if row:
            results.append(' '.join(row))
            row = []

# for last element this code has to be after loop
if row:
    results.append(' '.join(row))
    row = []

print(results)

print('\n\n'.join(results))

结果

['one\n', 'two\n', '\n', 'three\n', 'four\n', 'five\n', '\n', 'six\n', '\n', '\n', '\n', 'seven\n', 'eight']

['one two', 'three four five', 'six', 'seven eight']

one two

three four five

six

seven eight

顺便说一句:如果你取消注释行 if not row: results.append('\n') 那么你会得到

['\n', 'one two', '\n', 'three four five', '\n', 'six', '\n', 'seven eight']

你可能会 results[1:] 先跳过 \n