我尝试使用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)
答案 0 :(得分:8)
分割线条,剥去每条线条,然后重新加入:
s = text_file.read()
s = '\n'.join([line.strip() for line in s.splitlines()])
这会使用str.splitlines()
method和str.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'