转自:http://yiyunyaya.blog.163.com/blog/static/1654496362013265749168/
今天在博客园中看到一篇博文《python
去除多个换行》,试了作者的方法后,与之有很大的差别(不知道是不是由于用的python版本不同,我用的是Python 2.4.3),写出来与大家分享!
XXX 手机:1XXXXXX 邮箱: XXX@XXXX.com QQ:XXXXX
目的:去除中间的多个换行,使得显示更整齐美观:)
import sys
input = open(sys.argv[1]) output = open(sys.argv[2], 'w')
output.write('First one' + '\n') info = input.read() pp = '' for tt in info.splitlines(): tt=tt.rstrip()+'\n' pp=pp+tt output.write(pp)
input.close()
output.close()
测试结果:
First one XXX 手机:1XXXXXX 邮箱: XXX@XXXX.com QQ:XXXXX
发现结果并不是我们预想的,后来在交互模式下测试了一下:
>>> print info.splitlines() ['XXX', '', '', '\xe6\x89\x8b\xe6\x9c\xba\xef\xbc\x9a1XXXXXX', '', '', '\xe9\x82\xae\xe7\xae\xb1\xef\xbc\x9a', '', '', 'XXX@XXXX.com', '', '', 'QQ:XXXXX']
>>> len(info.splitlines()) 13
原来,虽然splitlines()没有保留每行中的“\n”,但info.splitlines()中的元素数与之前文件的行数是相同的,在对每个元素进行
import sys import re input = open(sys.argv[1]) output = open(sys.argv[2], 'w') info = input.read() output.write('-------\n' + 'Second one' + '\n') output.write('\n'.join(info.split()) + '\n')
input.close()
output.close()
测试结果:
Second one XXX 手机:1XXXXXX 邮箱: XXX@XXXX.com QQ:XXXXX
(三)用正则表达匹配中的re.sub()替换多个‘\n’,代码见下:
import sys import re input = open(sys.argv[1]) output = open(sys.argv[2], 'w') info = input.read() output.write('-------\n' + 'Third one' + '\n') output.write(re.sub('\n+', '\n', info)) input.close()
output.close()
测试结果:
------- Third one XXX 手机:1XXXXXX 邮箱: XXX@XXXX.com QQ:XXXXX
(四)文件一行一行读,遇到只有“\n”的行时,则不输出该行,代码见下:
import sys input = open(sys.argv[1]) output = open(sys.argv[2], 'w') output.write('-------\n' + 'Forth one' + '\n') while True: line = input.readline() if len(line) == 0: break elif len(line) > 1: output.write(line) input.close() output.close()
测试结果:
------- Forth one XXX 手机:1XXXXXX 邮箱: XXX@XXXX.com QQ:XXXXX
由上面的结果可知,方法(一)不能达到预期的目的,而方法(二)、(三)、(四)都是可行的。