使用Python删除多余的空行

使用Python删除多余的空行,python,Python,我想要记事本++的精彩功能删除Python中多余的空行 如果我有这样的文件 A B C D 我想要 A B C D 什么是蟒蛇式的方法 这是我试过的 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 els

我想要记事本++的精彩功能删除Python中多余的空行

如果我有这样的文件

A
B


C



D
我想要

A
B

C

D
什么是蟒蛇式的方法

这是我试过的

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

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

并且,对大文件使用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,

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

并且,对大文件使用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,
这是一条单行线:

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']
它基本上省略了跟在其他换行符后面的换行符。

这里有一行:

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']

它基本上省略了跟在其他换行符后面的换行符。

这就是你要找的吗

>>> 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创建该函数的一行代码相当容易:


这就是你要找的吗

>>> 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创建该函数的一行代码相当容易:


您有一个文件,因此让我们定义一个名为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)

现在,这将遍历您的文件,并确保一行中的空行数不超过空格

您有一个文件,因此让我们定义一个名为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)

现在,这将遍历您的文件,并确保一行中的空行数不超过空格

你尝试过什么吗?@RyanSaxe补充了我的尝试,考虑到新线是随机的,有什么更容易做到的方法吗?你尝试过什么吗?@RyanSaxe补充了我的尝试,考虑到新行是随机的,有什么更容易做到这一点的方法呢?这是一个文件…你的字符串不应该更像文件名吗?阅读?@JonClements谢谢你的回答,但在我的情况下,新行可能是随机的,反正可以包含在你的解决方案中。@Rajasankar你说随机是什么意思?我有一种感觉,这已经达到了您的期望……这是一个文件……您的字符串不应该更像文件名吗?阅读?@JonClements谢谢您的回答,但在我的情况下,新行可能是随机的,无论如何,可以包含在您的解决方案中。@Rajasankar随机是什么意思?我感觉这已经达到了你的期望。。。