5

ファイルからintを読み取るにはどうすればよいですか? 次のような整数データを含む大きな(512MB)txtファイルがあります。

0 0 0 10 5 0 0 140
0 20 6 0 9 5 0 0

を使用するc = file.read(1)と、一度に 1 文字しか取得できませんが、一度に 1 つの整数が必要です。お気に入り:

c = 0
c = 10
c = 5
c = 140 and so on...

どんな素晴らしい心でも助けてください。前もって感謝します。

4

3 に答える 3

7

1 つの方法を次に示します。

with open('in.txt', 'r') as f:
  for line in f:
    for s in line.split(' '):
      num = int(s)
      print num

そうfor line in fすることで、少しずつ読んでいます(どちらread() allも使用していませんreadlines)。ファイルが大きいため、重要です。

次に、各行をスペースで分割し、各数字を読み上げます。

ファイルに破損したデータが含まれている場合にバーフする単純な例よりも多くのエラー チェックを実行できます。

コメントが言うように、これで十分なはずです。それ以外の場合は、ファイルに非常に長い行が含まれる可能性がある場合は、一度にブロックを読み取るなどのトリッキーなことを行うことができます。

于 2012-07-19T05:45:36.203 に答える
2

512 MB は実際にはそれほど大きくありません。とにかくデータのリストを作成する場合は、読み取りステップを一度に実行しても問題はありません。

my_int_list = [int(v) for v in open('myfile.txt').read().split()]

メモリ内のリスト全体が必要ないようにコードを構造化できる場合は、ジェネレーターを使用することをお勧めします。

def my_ints(fname):
    for line in open(fname):
        for val in line.split():
            yield int(val)

そしてそれを使用します:

for c in my_ints('myfile.txt'):
    # do something with c (which is the next int)
于 2012-07-19T06:05:20.507 に答える
-2

私はそれをこのようにします:

  • バッファ=file.read(8192)
  • 内容+=バッファ
  • 出力文字列をスペースで分割します
  • 配列から最後の要素を削除します(完全な数ではない可能性があります)
  • 内容を最後の要素文字列に置き換えます
  • バッファがNoneになるまで繰り返します`
于 2012-07-19T05:46:10.940 に答える