现在的位置: 首页 > 综合 > 正文

python 去除文件中多个换行

2018年04月13日 ⁄ 综合 ⁄ 共 1812字 ⁄ 字号 评论关闭

转自:http://yiyunyaya.blog.163.com/blog/static/1654496362013265749168/

今天在博客园中看到一篇博文《python
去除多个换行
》,试了作者的方法后,与之有很大的差别(不知道是不是由于用的python版本不同,我用的是Python 2.4.3),写出来与大家分享!

输入文件:

XXX 手机:1XXXXXX 邮箱: XXX@XXXX.com QQ:XXXXX

目的:去除中间的多个换行,使得显示更整齐美观:)

方法:
(一)博文《python
去除多个换行
》中提到的方法:用字符串的splitlines()和strip()命令,代码见下:

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()中的元素数与之前文件的行数是相同的,在对每个元素进行

tt.rstrip()+'\n'操作时,又再每个元素中添加了一个“\n”,那么在最后输出的时候,就跟原来的文件一样了~~
(二)用字符串的split()操作按照空白进行分割,再用“\n”连接,代码见下:

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

由上面的结果可知,方法(一)不能达到预期的目的,而方法(二)、(三)、(四)都是可行的。

抱歉!评论已关闭.