‘\n’ at the end of each line

August 14, 2008 – 10:18 pm

其实我记忆中已经不止一两次碰到这个问题了,在今天又被它折腾了几个小时之后,我决定一定要把它记录在 Bug Archive 中。这就是从文件中一行一行地读取文本并进行处理的时候,末尾的那个换行的问题。

在 C 语言里一般不会遇到这样的问题,因为 C 语言有 getsfgets 两个函数,其中前者会去掉 '\n' ,而后者则会保留 '\n' ,而一般人都记不住这两者分别的行为,所以使用的时候都会小心翼翼。

而在 Python/Ruby/Perl 这样的语言中,从文件中按行读取简直太容易了,写一个处理文本行的程序就那么简单,可是却容易忘记了末尾的换行符。原本我想得到的是一个 "foobar" 的字符串,结果得到了 "foobar\n" 我还浑然不觉,继续处理,到最后结果完全出乎意料。

下次一定要记住,读入的文本行包含了换行符,如果必要的话,调用 strip 将它剔除!其实我觉得好像大多数情况下都不需要末尾的换行符,也许读取行的函数默认剔除换行符更加方便一些呢! :)

  1. 3 Responses to “‘\n’ at the end of each line”

  2. 记得在Learning Perl一书中,作者建议在决大多数读取的时候都用chomp(命令记不确切了)处理一下,有点强制教条的感觉。

    By liufeng on Aug 15, 2008

  3. 我猜,python的readlines底层用的正是fgets,ruby的readlines可以接受一个分隔符参数,所以统一不把默认的参数\n删除了。

    By momo on Aug 20, 2008

  4. @momo,
    接受一个分割符参数,并且这个参数默认为 ‘\n’ 。应该就比较方便啦! :D

    By pluskid on Aug 20, 2008

Post a Comment