3

行ごとに記述され、改行で区切られたいくつかの整数をファイルから読み取り、それらをリストに挿入する必要があります。

1
2
3
4
5

現在、次のコードを使用して読み取ることができましたが、コードを最適化する必要もあります。

import sys

fd = open(sys.argv[1], 'r')
for line in fd:
    line = line.rstrip('\n')
    L.append(int(line))

パフォーマンスの観点から改行文字を削除するすべての行をファイルから読み取る別の方法はありますか?

ありがとう。

4

4 に答える 4

4

int()空白文字は自動的に削除されるため、str.rstrip.

>>> int('10\r\n')
10
>>> int('10\n')
10
>>> int('10  \n')
10

ここでリスト内包表記を使用することもできます。これは次よりも高速ですlist.append

import sys

with open(sys.argv[1]) as fd:
    L = [int(line) for line in fd]

なぜwith声明?:

withファイル オブジェクトを扱うときは、キーワードを使用することをお勧めします。これには、途中で例外が発生した場合でも、スイートの終了後にファイルが適切に閉じられるという利点があります。

于 2013-08-05T09:24:12.347 に答える
3

リスト内包表記を使用すると、ループと追加が Python ではなくランタイム エンジンによって行われるため、より高速になります。(また、改行を削除する必要はありません)。

[int(line) for line in fd]
于 2013-08-05T09:24:53.453 に答える
3

int()末尾の空白はすでに削除されているため、実際に行を削除する必要はありません。

L = []
with open('nums.txt') as myfile: # With statements are more pythonic!
    for line in myfile:
        L.append(int(line))

print L

戻り値:

[1, 2, 3, 4, 5]

その結果、次を使用できますmap()

with open('nums.txt') as myfile:
    L = map(int, myfile)

お役に立てれば!

于 2013-08-05T09:24:14.597 に答える
0

具体的にはnumpyの使用を検討できますnumpy.genfromtxt。たとえば、次のようになります。

import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter="\n")

これによりdata、ファイル内と同じ数の行と列を持つnumpy配列が作成されます

于 2013-08-05T11:58:44.067 に答える