在空行之间加入行 - 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
我有一个文本文件中的行列表,我需要在其中连接连续的行并用空行与其他行分开。如果我尝试先清除空行然后通过偶数循环加入 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