0

プログラムは、次の方法でリストを .txt ファイルに書き込みます。

[ 3.  6.  3.  1.  1.  1.  0.  1.  2.  2.  9.  2.  5.  2.  2.  1.  0.  0.
  4.  6.  1.  1.  1.  0.  5.  2.  0.  0.  0.  0.  0.  0.  0.  0.]
[  4.   9.   8.   7.   2.   4.   1.   7.   5.   3.   7.   2.   6.   0.   9.
  5.   6.  10.   6.   2.   1.   5.   0.]
[  3.   5.   9.   1.   1.   1.   0.   1.   1.   4.   8.   5.   5.   3.   3.
   7.   6.  12.   9.   2.   1.   0.   0.   4.   6.   1.   1.   1.   0.   5.
   0.   0.   0.   0.   0.   0.   0.   0.   0.]

つまり、リストは 1 行ではありません。これらのリストごとにヒストグラムを作成したいのですが、リスト全体 (1 行ではなく) がインポートされたことを確認した後、これらをリスト内の整数値としてインポートするにはどうすればよいですか? 私が試してみました:

data = [line.strip() for line in open('n.txt', 'r')]

しかし、 data[0] を呼び出すと、一番上の行が得られます。助言がありますか?

4

3 に答える 3

0

ファイルへの書き込みを管理している場合は、このデータを書き込むためのより簡単な形式があります。しかし、これで行き詰まっている場合は、次の方法でロードできます。

import ast

with open('test.txt', 'r') as f:
    data = []
    curList = []
    for line in f:
        line = line.replace('[', ' [ ').replace(']', ' ] ')
        items = line.split()
        for item in items:
            if item == "[":
                curList = []
            elif item == "]":
                data.append(curList)
            else:
                curList.append(ast.literal_eval(item))

print data

出力:

[[3.0, 6.0, 3.0, 1.0, 1.0, 1.0, 0.0, 1.0, 2.0, 2.0, 9.0, 2.0, 5.0, 2.0, 2.0, 1.0, 0.0, 0.0, 4.0, 6.0, 1.0, 1.0, 1.0, 0.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [4.0, 9.0, 8.0, 7.0, 2.0, 4.0, 1.0, 7.0, 5.0, 3.0, 7.0, 2.0, 6.0, 0.0, 9.0, 5.0, 6.0, 10.0, 6.0, 2.0, 1.0, 5.0, 0.0], 
 [3.0, 5.0, 9.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 4.0, 8.0, 5.0, 5.0, 3.0, 3.0, 7.0, 6.0, 12.0, 9.0, 2.0, 1.0, 0.0, 0.0, 4.0, 6.0, 1.0, 1.0, 1.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]
于 2013-08-21T23:48:07.260 に答える