3

この単純なことが私を悩ませていることに私は驚いた。以下はコードです

list = []
f = open("log.txt", "rb")  # log.txt file has line separated values, 


for i in f.readlines():
    for value in i.split(" "):
        list.append(value)

print list

出力は

['xx00', '\n', 'xx01in', '\n', 'xx01na', '\n', 'xx01oz', '\n', 'xx01uk', '\n']

どうすれば改行、つまり'\ n'を取り除くことができますか?

4

5 に答える 5

5
list = []
f = open("log.txt", "rb")  # log.txt file has line separated values, 


for i in f.readlines():
    for value in i.strip().split(" "):
        list.append(value)

print list

.strip()末尾の改行を削除します。明示的に使用する.strip('\n').strip('\r\n')、場合によっては使用できます。

あなたはここでもっと読むことができます.strip()

編集

あなたがしたいことをするためのより良い方法:

with open("log.txt", 'rb') as f:
    mylist = [val for subl in [l.split(' ') for l in f.read().splitlines()] for val in subl]

目にははるかに簡単な答えについては、@ Jon Clementsの例のように、itertoolsをインポートし、chainを使用してリストのリストをフラット化できます。

したがって、次のようになります。

from itertools import chain
with open("log.txt", 'rb') as f:
    mylist = list(chain.from_iterable(l.split(' ') for l in f.read().splitlines()))
于 2012-10-18T09:07:45.523 に答える
2
with open("log.txt", "rb") as f:
    mylist = f.read().splitlines()

listまた、 Python型を覆い隠すため、変数名として使用しないでくださいlist()

于 2012-10-18T09:08:52.477 に答える
2

これを行う正しい方法は次のとおりです。

with open('log.txt') as fin:
    for line in fin:
        print line.split()

split() 引数なしで使用することにより、'\ n''は自動的に問題になりません(splitまたはsplit(None)は分割に異なるルールを使用するため)。

または、より簡潔に:

from itertools import chain
with open('log.txt') as fin:
    mylist = list(chain.from_iterable(line.split() for line in fin))
于 2012-10-18T09:17:33.460 に答える
2

行区切りとは、行ごとに値が1つしかないことを意味する場合、次のことはまったく必要ありませんsplit()

with open('log.txt', 'rb') as f:
    mylist = map(str.strip, f)

Python 3では、をラップmap()list()ます。

于 2012-10-18T09:33:08.607 に答える
1

スペースで区切られた値を持つ行がたくさんあり、改行がどこにあるかを気にせずにすべての値のリストが必要な場合(これは、常に同じ値に追加しているため、例からはそうであるように見えます)現在の行に関係なくリストします)、行をループする必要はありません。ファイル全体を単一の文字列として読み取り、split()引数なしで呼び出すだけです。スペースと改行の両方を含む、1つ以上の空白文字の任意のシーケンスで文字列を分割します。その結果、どの値にも空白は含まれません。

with open('log.txt', 'rb') as f:
    values = f.read().split()
于 2012-10-18T09:23:18.947 に答える