2

テキスト ファイルを読み取り、さまざまな行を処理するプログラムを作成していますが、発生した問題は行末 (\n) です。私の目的は、テキスト ファイルを 1 行ずつ読み取ってリストに書き込み、リストに追加する前に行末を削除することです。

私はこれを試しました:

thelist = []    
inputfile = open('text.txt','rU')    

for line in inputfile:
    line.rstrip()
    thelist.append(line)
4

7 に答える 7

4

文字列は Python では不変です。すべての文字列メソッドは新しい文字列を返し、元の文字列を変更しないため、次の行

line.rstrip()

事実上何もしません。リスト内包表記を使用してこれを実現できます。

with open("text.txt", "rU") as f:
    lines = [line.rstrip("\n") for line in f]

withまた、ステートメントを使用してファイルを開く (および暗黙的に閉じる)ことを強くお勧めします。

于 2012-08-06T12:02:38.503 に答える
3
with open('text.txt', 'rU') as f: # Use with block to close file on block exit
    thelist = [line.rstrip() for line in f]   
于 2012-08-06T12:02:52.133 に答える
2

rstripは引数を変更せず、変更された文字列を返します。そのため、次のように記述する必要があります。

thelist.append(line.rstrip())

しかし、コードをもっと簡単に書くことができます:

with open('text.txt', 'rU') as inputfile:
    thelist = [x.rstrip() for x in inputfile]
于 2012-08-06T12:02:21.960 に答える
0

rstrip新しい文字列を返します。である必要がありますline = line.rstrip()。ただし、コード全体は短くなる可能性があります。

thelist = list(map(str.rstrip, open('text.txt','rU')))

UPD: 呼び出すrstrip()だけで、改行だけでなく、末尾の空白がすべて削除されることに注意してください。しかし、それを行うための簡潔な方法もあります。

thelist = open('text.txt','rU').read().splitlines()
于 2012-08-06T12:07:59.427 に答える
0

このようなものが必要だと思います。

s = s.strip(' \t\n\r')

これにより、文字列の最初と最後の両方から空白が削除されます

于 2012-08-06T12:02:23.713 に答える
0

rstrip('\n')リストに追加する前に各行で使用します。

于 2012-08-06T12:02:37.893 に答える
0

Python では、文字列は不変です。つまり、操作は新しい文字列を返し、既存の文字列を変更しません。つまり、正しいのですが、を使用して再割り当て (または新しい変数に名前を付ける) 必要がありますline = line.rstrip()

于 2012-08-06T12:10:00.910 に答える