将字符串和数字读入数组

时间:2012-09-05 07:36:02

标签: python arrays string

谢谢你们,这真的很有帮助。你们都指出我的主要问题是我有4个空格而不是标签!

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

string001    124.342
string002    235.111
string003    552.145

底部有一个空行。

我只是想把它读成一个数组。我认为最好的方法是从numpy中加载文件,但是如果这不起作用,我就去了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.

有人可以帮我解决这个问题吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

你的代码在这里运行正常(虽然我想你想使用float dtype而不是整数一)与Python 2.7和numpy 1.5.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$

请确保您在数据文件中使用制表符而不是空格。

答案 1 :(得分: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

答案 2 :(得分:0)

确保您有合适的分隔符,即您的不同列实际上是由制表符分隔而不是硬空格。

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

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

(请注意,我更正了您的dtype,使用float作为第二个元素。 documentation会为您提供更多详细信息。