12

次のようなファイル形式があります。

9 8 1
3 4 1
...
...

ここで、各行を 3 つの整数として取得したいと考えています。

私が使用したとき

for line in f.readlines():
    print line.split(" ")

スクリプトはこれを出力しました:

['9', '8', '1\r\n']
['3', '4', '1\r\n']
...
...

各行を 3 つの整数として取得するにはどうすればよいですか?

4

5 に答える 5

18

あなたが持っているコードを使用して、リストを整数に変換する方法に関する特定の質問に対処します。

リスト内包表記intを使用して、次の例で各行を繰り返し、文字列を変換できます。

与えられた:

line =['3', '4', '1\r\n']

それから:

int_list = [int(i) for i in line]

整数のリストを生成します

[3, 4, 1]

その後、添字 (0 から 2) を介してアクセスできます。例えば

int_list[0]3_

int_list[1]4_


あなたの考慮のためのより合理化されたバージョン:

with open('data.txt') as f:
    for line in f:
        int_list = [int(i) for i in line.split()]
        print int_list

を使用する利点はwith、完了時または例外が発生した場合に、自動的にファイルを閉じることです。

更新

以下のコメントに基づいて、3つの異なる変数、たとえばabおよびの数値がc必要な場合は、次のことができます。

   for line in f:
       a, b, c = [int(i) for i in line.split()]
       print 'a = %d, b = %d, c = %d\n' %(a, b, c)

これを取得します:

    a = 9, b = 8, c = 1

これは、各行に 3 つの数字があることを前提としています。

余談:

「リスト内包表記」(LC) の代わりに、次の形式の「ジェネレータ式」(GE) も使用できることに注意してください。

    a, b, c = (int(i) for i in line.split())

3つの整数に関する特定の問題については、これは大きな違いはありませんが、完全を期すために示しています。より大きな問題の場合、LC はメモリ内に完全なリストを一度に生成するため、より多くのメモリを必要としますが、GE は必要に応じて値を 1 つずつ生成します。この SO の質問Generator Expressions vs. List Comprehensionは、興味がある場合に詳細情報を提供します。

于 2012-07-06T00:56:26.950 に答える
4
with open("myfile.txt") as f:
    for line in f:
        int_list = [int(x) for x in line.split()]

整数のリストで何をしたいかは言いません。場合によっては、整数を反復処理するより良い方法があるかもしれません。

「値が 3 つの異なる変数として必要な場合」

a, b, c = int_list

使用することもできますが:

int_list[0]
int_list[1]
int_list[2]

望んだ通りに。

于 2012-07-06T00:59:46.060 に答える
1
line.strip().split(" ") 

するでしょう。

より完全で、すべての行が 1 つの大きな文字列にそのまま残っています。

data = f.read().strip()    # loose final \n
[ int(x.split(" ")) for x in data.split('\n')]

行ごとに必要な回答のリストが表示されます。

于 2012-07-06T00:59:12.480 に答える
0

整数を3つの変数に格納したい場合:

with open('data1.txt') as f:
    for line in f:
        a,b,c=(int(x) for x in line.split()) 
        print a,b,c 

出力:

9 8 1
3 4 1
于 2012-07-06T01:16:07.077 に答える
0

このコードブロックはあなたの問題を解決するはずです:

f = open(filepath)
for line in f:
    intList = map(int, line.strip().split())
    print intList
f.close()
于 2012-07-06T01:01:25.550 に答える