1

我想要 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

4 回答 4

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,
于 2013-06-19T16:01:36.473 回答
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']

它基本上省略了其他换行符之后的换行符。

于 2013-06-19T17:06:28.317 回答
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')
于 2013-06-19T17:15:38.993 回答
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一行中的空白行数不超过!

于 2013-06-19T17:20:08.773 回答