通过使用Genfromtxt仅对一列错误。其他所有列均可读取。我该如何解决?

时间:2018-06-21 13:29:05

标签: python python-3.x numpy genfromtxt

我是python的新手,我想从.txt文件中读取数据。除标题外,只有浮点数。我有6列和很多行。 要阅读它,我正在使用genfromtxt。如果我想阅读前两列,那么它会起作用,但是如果我想阅读第5列,则会出现以下错误:

  

第#1357451行(获得4列而不是4列)

这是我的代码:

import numpy as np
data=np.genfromtxt(dateiname, skip_header=1, usecols=(0,1,2,5))
print(data[0:2, 0:3])

我认为第5列中缺少一些值,因此它不起作用。 有谁有办法解决我的问题并阅读第5列的数据?

2 个答案:

答案 0 :(得分:1)

来自genfromtxt文档:

Notes
-----
* When spaces are used as delimiters, or when no delimiter has been given
  as input, there should not be any missing data between two fields.

如果所有列(包括缺少的列)都正确排列,则可以使用delimiter的固定列宽版本。

 An integer or sequence of integers
    can also be provided as width(s) of each field.

当一行看起来像:

 one, 2, 3.4, , 5, ,

它可以明确标识7列。相反,如果是

 one 2 3.4  5    

它只能识别4列(通常将两个空白计数为一,以此类推,尾随的空白将被忽略)

答案 1 :(得分:0)

我找到了另一个解决方案。使用import numpy as np data=np.genfromtxt(dateiname, skip_header=1, usecols=(0,1,2,5), delimiter='\t', invalid_raise=False, filling_values=0) ,我可以用零填充空值。现在正在工作! :)

invalid_raise

此外,我不再将定界符保留为默认值,而是定义了制表符距离,并使用ws_clients = [] class TestHandler(tornado.websocket.WebSocketHandler): def open(self): print('open test!') ws_clients.append(self) self.random_number = random.randint(0, 101) def on_message(self, message): print(message) print('received', message, self, self.random_number) self.write_message('Message received') def on_close(self): print('closed') class DataHandler(tornado.websocket.WebSocketHandler): def open(self): print('data open!') def on_message(self, message): for c in ws_clients: c.write_message('hello!') class Application(tornado.web.Application): def __init__(self): handlers = [ (r"/test_service/", TestHandler), (r"/data/", DataHandler), (r"/", httpHandler) ] tornado.web.Application.__init__(self, handlers) ws_app = Application() ws_app.listen(8000) tornado.ioloop.IOLoop.instance().start() 可以跳过缺少的值。