Python中的Wahoo ticker X.fit文件读取/解析和分析

Python中的Wahoo ticker X.fit文件读取/解析和分析,python,monitoring,pyfits,heartrate,Python,Monitoring,Pyfits,Heartrate,不确定我是否可以在这里发布这样的问题,所以如果我在错误的地方,请重定向我 我买了一个Wahoo Ticker X来监测我运动时的心率。另外,我想更熟悉python,所以我决定自己用python而不是wahoo应用程序来分析我的心率。我想这也会让你在选择可视化、测试等方面有更多的自由 我记录了大约5分钟的心率,并导出了.fit文件。但是,我甚至找不到合适的库来读取.fit文件。有人能推荐一个使用wahoo的.fit文件的库吗 我正在使用ubuntu、anaconda和python 3.7 impo

不确定我是否可以在这里发布这样的问题,所以如果我在错误的地方,请重定向我

我买了一个Wahoo Ticker X来监测我运动时的心率。另外,我想更熟悉python,所以我决定自己用python而不是wahoo应用程序来分析我的心率。我想这也会让你在选择可视化、测试等方面有更多的自由

我记录了大约5分钟的心率,并导出了.fit文件。但是,我甚至找不到合适的库来读取.fit文件。有人能推荐一个使用wahoo的.fit文件的库吗

我正在使用ubuntu、anaconda和python 3.7

import pyfits

# Load the FITS file into the program
hdulist = pyfits.open('/home/bradmin/Downloads/2020-03-26.fit')

# Load table data as tbdata
tbdata = hdulist[1].data



OSError                                   Traceback (most recent call last)
<ipython-input-3-a970e2cd9dee> in <module>
      2 
      3 # Load the FITS file into the program
----> 4 hdulist = pyfits.open('/home/bradmin/Downloads/2020-03-26.fit')
      5 
      6 # Load table data as tbdata

~/anaconda3/lib/python3.7/site-packages/pyfits/hdu/hdulist.py in fitsopen(name, mode, memmap, save_backup, **kwargs)
    122         raise ValueError('Empty filename: %s' % repr(name))
    123 
--> 124     return HDUList.fromfile(name, mode, memmap, save_backup, **kwargs)
    125 
    126 

~/anaconda3/lib/python3.7/site-packages/pyfits/hdu/hdulist.py in fromfile(cls, fileobj, mode, memmap, save_backup, **kwargs)
    264 
    265         return cls._readfrom(fileobj=fileobj, mode=mode, memmap=memmap,
--> 266                              save_backup=save_backup, **kwargs)
    267 
    268     @classmethod

~/anaconda3/lib/python3.7/site-packages/pyfits/hdu/hdulist.py in _readfrom(cls, fileobj, data, mode, memmap, save_backup, **kwargs)
    853             # raise and exception
    854             if mode in ('readonly', 'denywrite') and len(hdulist) == 0:
--> 855                 raise IOError('Empty or corrupt FITS file')
    856 
    857             # initialize/reset attributes to be used in "update/append" mode

OSError: Empty or corrupt FITS file



导入pyfits
#将FITS文件加载到程序中
hdulist=pyfits.open(“/home/bradmin/Downloads/2020-03-26.fit”)
#将表数据作为tbdata加载
tbdata=hdulist[1]。数据
OSError回溯(最近一次调用上次)
在里面
2.
3#将FITS文件加载到程序中
---->4 hdulist=pyfits.open(“/home/bradmin/Downloads/2020-03-26.fit”)
5.
6#将表格数据加载为tbdata
fitsopen中的~/anaconda3/lib/python3.7/site-packages/pyfits/hdu/hdulist.py(名称、模式、memmap、保存备份、**kwargs)
122 raise VALUERROR('空文件名:%s'%repr(名称))
123
-->124返回HDUList.fromfile(名称、模式、memmap、save_备份、**kwargs)
125
126
fromfile中的~/anaconda3/lib/python3.7/site-packages/pyfits/hdu/hdulist.py(cls、fileobj、mode、memmap、save_backup、**kwargs)
264
265返回cls.\u readfrom(fileobj=fileobj,mode=mode,memmap=memmap,
-->266保存备份=保存备份,**kwargs)
267
268@classmethod
~/anaconda3/lib/python3.7/site-packages/pyfits/hdu/hdulist.py in\u readfrom(cls、fileobj、数据、模式、memmap、save\u备份、**kwargs)
853#提出和例外
854如果('readonly','denywrite')中的模式和len(hdulist)==0:
-->855 raise IOError('文件为空或已损坏')
856
857#初始化/重置在“更新/追加”模式下使用的属性
OSError:文件为空或已损坏
链接到文件:

编辑

我现在已经尝试过了,但出现了一个错误:

import fitdecode

src_file = "/home/bradmin/Downloads/2020-03-26.fit"

with fitdecode.FitReader(src_file) as fit:
    for frame in fit:
        # The yielded frame object is of one of the following types:
        # * fitdecode.FitHeader
        # * fitdecode.FitDefinitionMessage
        # * fitdecode.FitDataMessage
        # * fitdecode.FitCRC

        if isinstance(frame, fitdecode.FitDataMessage):
            # Here, frame is a FitDataMessage object.
            # A FitDataMessage object contains decoded values that
            # are directly usable in your script logic.
            print(frame.name)

file_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
developer_data_id
field_description
field_description
field_description
field_description

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-7-e8d95d3087dc> in <module>
      2 
      3 with fitdecode.FitReader(src_file) as fit:
----> 4     for frame in fit:
      5         # The yielded frame object is of one of the following types:
      6         # * fitdecode.FitHeader

~/anaconda3/lib/python3.7/site-packages/fitdecode/reader.py in __iter__(self)
    191 
    192     def __iter__(self):
--> 193         yield from self._read_next()
    194 
    195     @property

~/anaconda3/lib/python3.7/site-packages/fitdecode/reader.py in _read_next(self)
    298                 assert self._header
    299 
--> 300                 record = self._read_record()
    301                 if not record:
    302                     break

~/anaconda3/lib/python3.7/site-packages/fitdecode/reader.py in _read_record(self)
    443                     self._add_dev_data_id(message)
    444                 elif message.mesg_type.mesg_num == profile.MESG_NUM_FIELD_DESCRIPTION:
--> 445                     self._add_dev_field_description(message)
    446 
    447         return message

~/anaconda3/lib/python3.7/site-packages/fitdecode/reader.py in _add_dev_field_description(self, message)
    780         base_type_id = message.get_field('fit_base_type_id').raw_value
    781         field_name = message.get_field('field_name').raw_value
--> 782         units = message.get_field('units').raw_value
    783 
    784         try:

~/anaconda3/lib/python3.7/site-packages/fitdecode/records.py in get_field(self, field_name_or_num, idx)
    188         raise KeyError(
    189             f'field "{field_name_or_num}" (idx #{idx}) not found in ' +
--> 190             f'message "{self.name}"')
    191 
    192     def get_fields(self, field_name_or_num):

KeyError: 'field "units" (idx #0) not found in message "field_description"'





导入fitdecode
src_file=“/home/bradmin/Downloads/2020-03-26.fit”
使用fitdecode.FitReader(src_文件)作为合适的:
对于合适的框架:
#生成的框架对象属于以下类型之一:
#*fitdecode.FitHeader
#*fitdecode.FitDefinitionMessage
#*fitdecode.FitDataMessage
#*fitdecode.FitCRC
如果isinstance(帧,fitdecode.FitDataMessage):
#这里,frame是FitDataMessage对象。
#FitDataMessage对象包含的解码值
#可以直接在脚本逻辑中使用。
打印(帧名称)
文件标识
开发者数据id
开发者数据id
开发者数据id
开发者数据id
开发者数据id
开发者数据id
开发者数据id
开发者数据id
开发者数据id
开发者数据id
开发者数据id
开发者数据id
字段描述
字段描述
字段描述
字段描述
---------------------------------------------------------------------------
KeyError回溯(最近一次呼叫最后一次)
在里面
2.
3使用fitdecode.FitReader(src_文件)作为合适的:
---->4对于合适的框架:
5#产生的框架对象属于以下类型之一:
6#*fitdecode.FitHeader
~/anaconda3/lib/python3.7/site-packages/fitdecode/reader.py in(self)
191
192 def__________________(自):
-->193从自我中屈服
194
195@property
~/anaconda3/lib/python3.7/site-packages/fitdecode/reader.py in\u read\u next(self)
298断言自身。\u头
299
-->300记录=self.\u读取\u记录()
301如果没有记录:
302休息
~/anaconda3/lib/python3.7/site-packages/fitdecode/reader.py in\u read\u record(self)
443自我添加开发数据id(消息)
444 elif message.mesg\u type.mesg\u num==profile.mesg\u num\u FIELD\u DESCRIPTION:
-->445自我添加开发字段描述(消息)
446
447返回消息
~/anaconda3/lib/python3.7/site-packages/fitdecode/reader.py在添加开发字段描述中(自我,消息)
780基本类型id=消息。获取字段('fit基本类型id')。原始值
781字段名称=消息。获取字段(“字段名称”)。原始值
-->782单位=消息。获取单位字段(“单位”)。原始单位值
783
784尝试:
获取字段中的~/anaconda3/lib/python3.7/site-packages/fitdecode/records.py(self,field\u name\u或\u num,idx)
188上升键错误(
189在中找不到字段“{field_name_或_num}”(idx{idx})”+
-->190 f'信息{self.name}')
191
192 def get_字段(self、field_name或_num):
KeyError:“在消息“字段描述”中找不到字段“单位”(idx#0)”
格式似乎是
pyfits
似乎是一种完全不同的格式

上面的文章提到了一个
gpsbabel
工具,您可以使用它将FIT文件转换为更具互操作性和可用性的文件,例如GPX(一种易于解析的基于XML的格式)


当然,如果您想要纯Python解决方案,也可以使用Python库。

感谢您抽出时间回答我的问题,您是否可以分享一些关于如何访问数据的代码?我试图阅读它,但它给出了一个错误(见编辑问题)。我该如何将数据转换为我能处理的格式?可能是库由于某种原因无法处理您的特定文件,或者文件不知何故被破坏了。你必须从那里调试东西…它没有坏,我说