1

みんなありがとう、それは本当に助けになりました。ご指摘のとおり、私の主な問題は、タブではなく4つの空白があることです。

次の形式のテキストファイルがあります。

string001    124.342
string002    235.111
string003    552.145

下部に空白行があります。

これを配列に読み込みたいだけです。これを行う最善の方法はnumpyからのloadtxtだと思いましたが、これが機能しない場合は、genfromtxtを使用しましたが、それを完全に機能させることもできませんでした。これが私の最新の取り組みです。

y = np.genfromtxt('1400list.txt',delimiter="\t", dtype=[('mystring','S10'),('myint','i8')])

print y

しかし、エラーが発生します:

rows = np.array(data, dtype=[('', _) for _ in dtype_flat])
ValueError: size of tuple must match number of fields.

誰かが私がこれを理解するのを手伝ってくれませんか?

ありがとうございました!

4

3 に答える 3

2

ここでのコードは、Python2.7とnumpy1.5.1で正常に機能します(整数の代わりにfloat dtypeを使用したいと思いますが)。

#!/usr/bin/env python
import numpy

y = numpy.genfromtxt('1400list.txt', delimiter='\t',dtype=[('A', 'S10'),
('B', 'i8')])
print y

出力は次のとおりです。

vicent@deckard:/tmp$ python prova.py 
[('string001', 124L) ('string002', 235L) ('string003', 552L)]
vicent@deckard:/tmp$

データファイルでスペースではなくタブを使用していることを確認してください。

于 2012-09-05T16:41:03.373 に答える
0

これは機能するはずです:

f = open("text.txt")
items = []
for line in f.readlines():
    arr = line.split("    ")
    if len(arr) == 2:
        items.append((arr[0], float(arr[1])))
f.close()

数値はintではなくfloatであることに注意してください。また、最後の行にはエントリがないため、if len(arr) == 2

于 2012-09-05T08:01:22.693 に答える
0

適切な区切り文字があることを確認してください。つまり、さまざまな列が実際にはハードスペースではなく表で区切られていることを確認してください。

別の方法として、初期ファイルのフォーマットが固​​定されている場合は、整数のタプルを区切り文字として使用することもできます。あなたの場合、それは使用しているでしょう

np.genfromtxt("text.txt", delimiter=(14,7), dtype=[('mystring','S10'),('myint','float')])

( 2番目の要素にdtypeaを使用して、を修正したことに注意してください)。ドキュメントに詳細が記載されていますfloat

于 2012-09-05T19:16:37.863 に答える