如何从python中的多行字符串中删除特定的空行?

时间:2015-08-25 14:02:45

标签: python

我正在使用模板创建多个.txt文件。某些文件将具有空值,因此我想删除生成的空行:

arg1 = '- this is the third line'
arg2 = '- this is the fourth line'
arg3 = ''
arg4 = '- this is the sixth line'

应用于模板时,结果如下:

(内容为多行字符串)

This is the first line:

    - this is the third line
    - this is the fourth line

    - this is the sixth line

This is some other content whose possible empty lines need to be left alone.

从模板:

This is the first line:

    $arg1
    $arg2
    $arg3
    $arg4

This is some other content whose possible empty lines need to be left alone.

所以在我将这个内容写入文件之前,我想删除那些丑陋的空行,所以它看起来像这样:

This is the first line:

        - this is the third line
        - this is the fourth line         
        - this is the sixth line

This is some other content whose possible empty lines need to be left alone.

换句话说,我想删除属于特定行范围的所有空行,如下所示:

for line, index_line in zip(content.splitlines(), range(1, 11)):
    if index_line in range(4, 11) and line == '    ':
        # command that will remove the empty line and save the new content

P.S。范围是不同的,因为这是我自己的代码片段,但给定示例的范围是:

当我们通过第六行时,

range (1, 7) #stop

range(3,7)#只检查给定范围内的行

2 个答案:

答案 0 :(得分:1)

您想要的功能是list.pop(index)

# assuming you have the contents read from the file split into this list:
lines = content.splitlines()

indicestoremove=[]
for index in range (2,6): # or whatever range of lines you want to trim - 
                          # remember indices start from 0 for the first line
    if lines[index] == '':
        indicestoremove.append(index)

# remove in reverse order, as pop() changes the index of items later in the list
for index in sorted(indicestoremove, reverse=True):
    lines.pop(index)

f = open('filename')
for line in lines:
  f.write("%s\n" % line)

答案 1 :(得分:0)

如果范围可能会有所不同,并且我们可以指望“^ - \ s”作为我们想要开始和停止删除空行的标志,那么您可以使用正则表达式。

import re

s = '''This is the first line:

    - this is the third line
    - this is the fourth line

    - this is the sixth line


This is some other content whose possible empty lines need to be left alone.

Leave that last line alone.
'''

remove_empty = False
lines = []
for line in s.splitlines():
    l = line.strip()
    if l != '':
        dashed = (re.match('^-\s', l) is not None)
        if dashed and not remove_empty:
            # Now we need to start removing empty strings
            remove_empty = (re.match('^-\s', l) is not None)
        elif not dashed and remove_empty:
            # Now it is time to stop
            remove_empty = False
            lines.append('')

    if l != '' or not remove_empty:
        lines.append(line)

print '\n'.join(lines)
# This is the first line:
#
#     - this is the third line
#     - this is the fourth line
#     - this is the sixth line
#
# This is some other content whose possible empty lines need to be left alone.
#
# Leave that last line alone.

如果您确定了范围,那么看起来Aaron D会有更好的解决方案。