python2.6 打印时遇到\r的问题
在抓取境外网站评论时解析文本时遇到一个神奇的问题,在此记录一下。
背景是:对抓取页面使用lxml解析,通过text()获取某个标签下的文本,为格式化文本对文本使用了replace()函数替换掉换行,格式化后的文本在终端的显示与原本的文本相差太大。
代码如下:
for item in result:
print ' 1111 ',item,'\n'
print ' 2222 ',item.replace('\n',''),'\n'
print ' 3333 ',len(item.replace('\n','').replace('\r','')),len(item),'\n'
print ' 4444 ',(item.replace('\n',''),),'\n'
print ' 5555 ',[item.replace('\n','')],'\n'
print ' 6666 ',item.replace('\n','').replace('\r','').strip(),'\n'
如下图:
结果中比较明显的是:
第二次打印是 字符2222没有打印出来,而且第一句也没有答应出来,但是将其作为元组或者列表的元素打印出来就是完整的
一直好奇是什么情况,原本以为是html源码中包含了未知的字符导致的,通过排查发现并没有特殊的情况。最终发现在替换时只是替换了 \n 并没有替换 \r,而\r在不同终端中显示效果不同。
在centos的终端中展示效果:
在windows下的python IDE中展现的效果:
二者的情况截然不同,前者\r前的字符并没有展现,后者就展现了。