删除段落和文件结尾之间多个空行的Python脚本

删除段落和文件结尾之间多个空行的Python脚本,python,file,Python,File,我编写了一个python脚本来捕获我想要的数据,但是 我有一个结果文本文件,其中包含多个段落,但每个段落由不同的空行分隔-从2到8 我的文件在文件末尾还有多个空行 我希望Python在段落之间和文本文件末尾之间不超过2行空行 我曾经尝试过一个循环和一条线。条带,替换等,但我显然不知道如何把这些放在一起 到目前为止我一直在使用的示例 wf = open(FILE,"w+") for line in wf: newline = line.strip('^\r\n')

我编写了一个python脚本来捕获我想要的数据,但是 我有一个结果文本文件,其中包含多个段落,但每个段落由不同的空行分隔-从2到8

我的文件在文件末尾还有多个空行

我希望Python在段落之间和文本文件末尾之间不超过2行空行

我曾经尝试过一个循环和一条线。条带,替换等,但我显然不知道如何把这些放在一起

到目前为止我一直在使用的示例

wf = open(FILE,"w+")
for line in wf:
         newline = line.strip('^\r\n')
         wf.write(newline)
         wf.write('\n')

以下是一些未经测试的代码:

import re

new_lines = re.compile('\n{2,9}')

with open(FILE) as f:
    contents = f.read()
contents = re.sub(new_lines, '\n\n\n', contents.strip())
with open(FILE, 'w') as f:
    f.write(contents)

首先,删除末端的空白行。然后,正则表达式匹配文件内容中2到9个换行符的实例,并用
re.sub()
函数将其替换为3个换行符。

实际上,删除所有空行,然后在段落之间插入两个空行(并且在末尾无空行)更容易而不是计算所有空行,只有在空行数超过两行时才删除。除非您处理的是大文件,否则我认为这两种方法之间不会有任何性能差异。下面是一个使用
re
的快速而肮脏的解决方案:

import re
# Reads from file
f = open('test.txt', 'r+')
txt = f.read()
# Removes all blank lines
txt = re.sub(r'\n\s*\n', '\n', txt)
# Adds two blanks between all paragraphs
txt = re.sub(r'\n', '\n\n\n', txt)
# Removes the blank lines from the EOF
txt = re.sub(r'\n*\Z', '', txt)
# Writes to file and closes
f.write(txt)
f.close()
之前:

One line below

None below
Three below



EOF with one blank line below (stackoverflow's code thingy omits it)
之后:

One line below


None below


Three below


EOF with one blank line below

我知道所要求的答案是python,但我认为这可能是一种过分的做法

为什么不直接在shell上预处理文件呢?使用
grep
sed
awk
完成此操作

以下是grep版本:

$ grep -v '^$' input.txt > output.txt

这里有一个

到目前为止,这个问题还没有真正得到回答。 这里有一个可行的解决方案,但我认为它可能更好

newtext = ''    
counter = 0
for line in text.splitlines():
    line = line.strip()
    if len(line)==0:
        counter += 1
        if counter<=2:
            newtext += line + '\n'
    else:
        newtext += line + '\n'
        counter = 0
newtext=''
计数器=0
对于文本中的行。拆分行():
line=line.strip()
如果len(line)==0:
计数器+=1

如果非常感谢您的回复,我将尝试Python方法,因为我的脚本的其余部分是用Python编写的。我将更新一次运行。当我尝试亚历克斯脚本时,我注意到它没有改变段落之间的空行。当我生成文件时,它通常通过电子邮件发送出去。outlook中接收到的文件有奇怪的字符(句子开头大约有4个小方框),在记事本上看得更远,我以为是空白行,似乎按顺序有CRLF,LF,LF,LF,LF-CRLF-每行一个LF或一个LF-CRLF。不知道为什么会这样做,但我可以问一下如何修改脚本以首先删除这些,然后继续上面的Alex脚本吗?谢谢。请尝试“\r\n”而不是“\n”。这并不能回答问题中“段落之间和文本文件末尾的空行不超过2”的部分--从技术上讲,“0”是“不超过2”但我认为这样做的目的是在非空白行之间留出最多两个空白行。空白行的最大数量可以更改。此处允许有两个空行。