谢谢你们,这真的很有帮助。你们都指出我的主要问题是我有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.
有人可以帮我解决这个问题吗?
谢谢!
答案 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会为您提供更多详细信息。