fit文档解析

FIT 是一种二进制文件格式,用于存储健康和健身设备(如个人训练计算机、心率显示屏、自行车计算机等)生成的健康和健身数据。FIT 文件包含多个数据帧,每个数据帧包含一些数据字段,这些数据字段对应于特定健身活动的特定事件或统计信息。对于不同的健身设备和健身活动(如跑步、骑行、游泳等),每个 FIT 文件可能具有不同的数据帧类型和字段。

目前使用python的方式解析

#以下执行版本为python2.7 fitparse版本23.1.2 既1.2.0

import io
import os
import requests
import json
import datetime
import tempfile

import fitparse

class DateTimeEncoder(json.encoder.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime.datetime):
            return o.isoformat()
        return super(DateTimeEncoder, self).default(o)

def parse_fit_file_from_url(url):
    # 从 URL 下载 `.fit` 文件并将其保存到临时文件中
    response = requests.get(url)
    content_file = io.BytesIO(response.content)
    temp_file = tempfile.NamedTemporaryFile(delete=False)
    temp_file.write(content_file.getvalue())
    temp_file.close()

    # 解析 `.fit` 文件并提取数据
    fitfile = fitparse.FitFile(temp_file.name)
    lap_data = []
    message_data = []
    
    for record in fitfile.get_messages('record'):
        # 从每个记录帧中提取数据并转换为字典
        message = {}
        for data in record:
            name = data.name
            value = data.value
            
            # 如果值为 bytes 类型,则将其转换为字符串类型
            if isinstance(value, str):
                value = value.decode('utf-8')
                value = value.split('\x00')[0] or None
            
            message[name] = value
        
        message_data.append(message)

    # 删除临时文件
    os.unlink(temp_file.name)

    # 将提取的数据转换为 JSON 格式并返回
    result_json = json.dumps(message_data, cls=DateTimeEncoder)
    return result_json

# 设置要下载和解析的 `.fit` 文件地址
url = "xxxxx.fit"

# 调用解析 `.fit` 文件的函数,将结果作为 JSON 返回
result_json = parse_fit_file_from_url(url)

# 输出 JSON 格式的解析结果
print(result_json)

但是我在解析高驰时遇到一个问题

Invalid field size 1 for type 'uint32' (expected a multiple of 4)

改版本可能已经不适用于python2.7.2

推荐将其改为fitdecode(不支持python2)

当然你也可以重写他的代码库。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值