rstrip无法移除换行符,我做错了什么?

21

这真是让我抓狂...已经折腾了一个小时了,但我还是无法做到我想要的,也就是移除换行符。

def add_quotes( fpath ):

        ifile = open( fpath, 'r' )
        ofile = open( 'ofile.txt', 'w' )

        for line in ifile:
            if line == '\n': 
                ofile.write( "\n\n" )
            elif len( line ) > 1:
                line.rstrip('\n')
                convertedline = "\"" + line + "\", "
                ofile.write( convertedline )

        ifile.close()
        ofile.close()
3个回答

35

关键在于rstrip的签名。

它返回一个字符串的副本,但是去掉了指定的字符,因此你需要将line赋上新值:

line = line.rstrip('\n')

这允许有时非常方便地链接操作:

"a string".strip().upper()
正如Max. S在评论中所说,Python字符串是不可变的,这意味着任何“突变”操作都会产生一个已变异的副本。
这是许多框架和语言中的工作方式。如果您确实需要具有可变字符串类型(通常基于性能原因),则可以使用字符串缓冲区类。

8
通常情况下,在Python中,字符串是不可变的。一旦创建,就不能更改。对任何对字符串进行操作的函数都会返回一个副本。 - Max Shawabkeh
确实。也许我应该把这个放在答案里。 - Skurmedel
谢谢,我知道这一定是某些简单的东西...只是因为我只是匆匆浏览了Python文档,所以是我的错。 - volting
@max 谢谢你提到这个。 - volting

3

你可以像这样操作

def add_quotes( fpath ):
        ifile = open( fpath, 'r' )
        ofile = open( 'ofile.txt', 'w' )
        for line in ifile:
            line=line.rstrip()
            convertedline = '"' + line + '", '
            ofile.write( convertedline + "\n" )
        ifile.close()
        ofile.close()

3
正如Skurmedel的回答和评论中所提到的,您需要执行类似以下操作:
stripped_line = line.rstrip()

接着,将去除格式的行(stripped_line)写出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接