19

以下に示すように、テキストファイルと同じ形式のPythonのマトリックス配列にインポートしようとしているタブ区切りの.txtファイルがあります。

123088 266 248 244 266 244 277

123425 275 244 241 289 248 231

123540 156 654 189 354 156 987

Python に渡し、そこから行列配列を作成するときに同じフォーマットを維持したい上記のもの (約 200 行) がさらに多くあることに注意してください。

私がこれのために持っている現在のコードは次のとおりです。

d = {}
with open('file name', 'rb') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter='\t')
    for row in csv_reader:
        d[row[0]] = row[1:]

必要なことはわずかに行いますが、目標とする目標ではありません。print(d[0,3]) に入力できるコードを完成させたいのですが、248 が吐き出されます。

4

4 に答える 4

34

まず、それをディクショナリにロードしていますが、これでは必要なリストのリストを取得できません。

CSV モジュールを使用して、次のようなリストのリストを生成するのは非常に簡単です。

import csv
with open(path) as f:
    reader = csv.reader(f, delimiter="\t")
    d = list(reader)
print d[0][2] # 248

これにより、文字列のリストのリストが得られるため、数値を取得したい場合は int に変換する必要があります。

とはいえ、大きな配列がある場合 (または何らかの数値計算を行っている場合) は、NumPypandasなどの使用を検討する必要があります。NumPy を使用したい場合は、

import numpy as np
d = np.loadtxt(path, delimiter="\t")
print d[0,2] # 248

おまけとして、NumPy 配列を使用すると、ベクトル/行列の操作をすばやく実行できます。d[0][2](また、 NumPy 配列でも機能することに注意してください)。

于 2013-06-08T11:21:18.270 に答える
4

これを試して:

d = []
with open(sourcefile,'rb') as source:
    for line in source:
        fields = line.split('\t')
        d.append(fields)

print d[0][1]266を出力します。

print d[0][2](配列は 0 ベースであることを思い出してください) は 248 を出力します。

入力と同じ形式でデータを出力するには:

for line in d:
    print "\t".join(line)
于 2013-06-07T17:27:36.810 に答える