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'

如下图:

python2.6 打印时遇到\r的问题

结果中比较明显的是:

    第二次打印是 字符2222没有打印出来,而且第一句也没有答应出来,但是将其作为元组或者列表的元素打印出来就是完整的

    一直好奇是什么情况,原本以为是html源码中包含了未知的字符导致的,通过排查发现并没有特殊的情况。最终发现在替换时只是替换了 \n 并没有替换 \r,而\r在不同终端中显示效果不同。

在centos的终端中展示效果:

python2.6 打印时遇到\r的问题

在windows下的python IDE中展现的效果:

python2.6 打印时遇到\r的问题

二者的情况截然不同,前者\r前的字符并没有展现,后者就展现了。