修剪多行的空白

时间:2015-07-04 07:41:45

标签: python

我尝试使用s.strip()这样修改python中的空格,但它只在第一行工作:

输入:

   a
    b

输出:

a
    b

如何从多行修剪空白?这是我的代码:

代码:

import sys

if __name__ == "__main__":
    text_file = open("input.txt", "r")
    s = text_file.read()
    s = s.strip()
    text_file.close()
    with open("Output.txt", "w") as text_file:
        text_file.write(s)

4 个答案:

答案 0 :(得分:8)

分割线条,剥去每条线条,然后重新加入:

s = text_file.read()
s = '\n'.join([line.strip() for line in s.splitlines()])

这会使用str.splitlines() methodstr.join() method将这些行重新组合在一起,并在其间添加换行符。

更好的是,逐行读取文件,一次性处理和写出;这样你整个过程就需要更少的内存:

with open("input.txt", "r") as infile, open("Output.txt", "w") as outfile:
    for line in infile:
        outfile.write(line.strip() + '\n')

答案 1 :(得分:3)

使用

for line in s.splitlines()

迭代每一行并使用strip()

答案 2 :(得分:2)

出现此问题是因为string.strip()只删除了尾部和前导空格,它不会删除中间的空格。

输入 -

   a
    b

正在做text_file.read()

实际的字符串表示形式为 -

'   a\n    b'

s.strip()将删除尾随和前导空格,但不会删除中间的\n和空格,因此您将获得多行,而中间的空格不会被删除。

为了使你的情况起作用,你应该逐行读取输入,然后去除每一行并将其写回。

示例 -

import sys

if __name__ == "__main__":
    with open("input.txt", "r") as text_file, open("Output.txt", "w") as out_file:
        for line in text_file:
            out_file.write(line.strip() + '\n')

答案 3 :(得分:0)

仅出于完整性考虑,还有textwrap.dedent(), 例如允许编写缩进代码的多行字符串(以提高可读性),而生成的字符串没有左侧空格。 例如https://docs.python.org/3/library/textwrap.html#textwrap.dedent

中给出的
import textwrap

def test():
        # end first line with \ to avoid the empty line!
        s = '''\
        hello
          world
        '''
        print(repr(s))          # prints '    hello\n      world\n    '
        print(repr(dedent(s)))  # prints 'hello\n  world\n'