web-dev-qa-db-ja.com

大きなタブ区切りの.txtファイルをPython

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

123088 266248244266266244277

123425 275244241289248231

123540 156654189354156987

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

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

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が吐き出されます。

13
user2464402

最初に、それを辞書にロードしますが、辞書は必要なリストのリストを取得しません。

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

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

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

ただし、大きな配列がある場合(または何らかの数値計算を行う場合)、 NumPy または pandas のようなものの使用を検討する必要があります。 NumPyを使用する場合は、次のようにします。

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

おまけとして、NumPy配列を使用すると、ベクトル/行列演算をすばやく実行できます。 (また、d[0][2]はNumPy配列でも動作します)。

27
Jeff Tratner

これを試して:

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)
3
jsucsy

print(d[0,3]) output 248の作り方がわかりませんが、これはprint(d[0][3]) output 248になります。ライン。

import csv

Text_Input = r"<.txt file>"  
listoflists= []

with open(Text_Input) as txtfile:
    reader = csv.reader(txtfile)

    for row in reader:
        listoflists.append([int(row[0].split()[i]) for i in 
        range(len(row[0].split()))])
0
K Butler