使用Python删除多余的空白行

时间:2013-06-19 15:52:49

标签: python

我想在Python中使用Notepad ++的精彩功能“删除剩余空白行”。

说我是否有这样的文件

A
B


C



D

我想要

A
B

C

D

这样做的pythonic方法是什么?

这是我试过的

A=['a','\n','\n','\n','a','b','\n','\n','C','\n','\n','\n','\n','\n','\n','D']
B=[]
count=0
for l in range(0,len(A)):
    if A[l]=='\n':
        count=count+1
    else:
        count=0
    if count>1:
        if A[l+1]=='\n':
            continue
        else:   
            B.append('\n')
    else:
        if A[l]!='\n':
            B.append(A[l])
print B

4 个答案:

答案 0 :(得分:5)

确保不超过\n\n,例如:

import re
print re.sub('\n{3,}', '\n\n', your_string, flags=re.M)

并且,对大文件使用itertools.groupby

from itertools import groupby

with open('your_file') as fin:
    for has_value, lines in groupby(fin, lambda L: bool(L.strip())):
        if not has_value:
            print
            continue
        for line in lines:
            print line,

答案 1 :(得分:2)

这是一个单行:

In [35]: A=['a','\n','\n','\n','a','b','\n','\n','C','\n','\n','\n','\n','\n','\n','D']

In [36]: B = [A[0]] + [A[i] for i in range(1, len(A)) if A[i] != '\n' or A[i-1] != '\n']

In [37]: B
Out[37]: ['a', '\n', 'a', 'b', '\n', 'C', '\n', 'D']

它基本上省略了跟随其他换行符的换行符。

答案 2 :(得分:1)

这是你在找什么?

>>> def delete_surplus_blank_lines(text):
    while '\n\n\n' in text:
        text = text.replace('\n\n\n', '\n\n')
    return text

>>> text = 'a\n\n\nab\n\nC\n\n\n\n\n\nD'
>>> print(text)
a


ab

C





D
>>> print(delete_surplus_blank_lines(text))
a

ab

C

D
>>> 

更有效的实施(基于NPE的想法)将是:

def delete_surplus_blank_lines(text):
    return text[:2] + ''.join(text[index] for index in range(2, len(text))
                              if text[index-2:index+1] != '\n\n\n')

使用lambda

创建该函数的单行程非常容易
delete_surplus_blank_lines = lambda text: return text[:2] + ''.join(text[index] for index in range(2, len(text)) if text[index-2:index+1] != '\n\n\n')

答案 3 :(得分:0)

你有一个文件,所以我们定义一个名为clean_up的函数来清理你给的文件:

def clean_up(file_name,blanks=1):
    with open(file_name,'r+') as f:
        blank = 0
        for line in f:
            if blank < blanks:
                if line == "\n":
                    blank += 1
                f.write(line)
            else:
                blank = 0
                if line != "\n":
                    f.write(line)

现在这将遍历您的文件,并确保连续的空白行数不超过blanks