web-dev-qa-db-ja.com

rstripが改行文字を削除しない何が間違っているのですか?

ここで髪を抜く...この1時間、これで遊んでいますが、私が望むことを実行することができません。改行シーケンスを削除します。

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()
14
volting

手がかりはrstripの署名にあります。

文字列のコピーを返しますが、目的の文字が削除されているため、lineに新しい値を割り当てる必要があります。

line = line.rstrip('\n')

これにより、非常に便利な操作の連鎖が可能になります。

"a string".strip().upper()

Max。S がコメントで述べているように、Python文字列は不変です。つまり、「変更」操作を行うと、変更されたコピーが生成されます。

これは、多くのフレームワークと言語でどのように機能するかです。本当に可変の文字列タイプが必要な場合(通常はパフォーマンス上の理由から)、文字列バッファクラスがあります。

22
Skurmedel

あなたはこのようにそれを行うことができます

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
ghostdog74

Skurmedelの回答とコメントでほのめかされているように、次のようなことをする必要があります。

stripped_line = line.rstrip()

次に、striped_lineを書き出します。

2
GreenMatt