1

谢谢大家,这真的很有帮助。正如你们所指出的,我的主要问题是我有 4 个空格而不是一个制表符!

我有一个格式的文本文件:

string001    124.342
string002    235.111
string003    552.145

底部有一个空行。

我只想将它读入一个数组。我认为最好的方法是从 numpy 加载txt,但是当这不起作用时,我选择了 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

您的代码在 Python 2.7 和 numpy 1.5.1 中运行良好(尽管我想您想使用 float dtype 而不是整数 1):

#!/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

确保您有正确的分隔符,也就是说,您的不同列实际上是由制表符而不是硬空格分隔的。

作为替代方案,如果您的初始文件具有某些固定格式,您也可以使用整数元组作为分隔符。在你的情况下,那将使用

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

(请注意,我更正了您的dtype,使用 afloat作为第二个元素)。该文档将为您提供更多详细信息。

于 2012-09-05T19:16:37.863 回答
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()

请注意,数字是浮点数,而不是整数。另请注意,最后一行没有条目,因此if len(arr) == 2.

于 2012-09-05T08:01:22.693 回答