小米运动健康运动记录csv文件转成fit和tcx文件终于不用分段了
小米运动健康运动记录csv文件转成fit和tcx文件终于不用分段了
运动记录转换工具 是在2023年12月23日开始支持将小米运动健康导出来的csv文件转换格式成fit和tcx格式,然后导入高驰佳明等平台的。
其实本人是原计划是春节期间闲暇时着手编码支持小米运动健康的,毕竟小米系的运动记录导出的细节数据不多,只有单条运动的概要信息和心率信息,导致实际的转换效果并不是太少,可能跟一些没有仔细看说明的跑友的预期有些不符,这个也是没办法的事情,只能期待小米啥时候能导出更多详细信息了。
2023年12月的时候本人挡不住几个跑友的强烈要求和支持鼓励,挤出时间花了几个晚上来编码支持小米运动健康了,整体进度提前了。其实还是有不少跑友(比如本人)的第一款手表或者手环是小米系的,加上现在小米主推的导出数据副本的方式就是从小米官网导出(可参考教程小米运动健康运动记录导出),所以支持肯定是会支持的,能提早支持肯定更好啦。
导出的小米健康运动记录是全量数据,这就导致拿到的数据文件会特别大,准确说是XXX_MiFitness_hlth_center_fitness_data.csv这个文件太大了,动不动就300M以上,里面的记录条数达到200W行以上,虽然不少数据记录并不是运动期间产生的,对运动记录转换并没有实质性用处,但是想用删除或过滤掉还是很麻烦的。
其实这么大的csv文件,用Excel软件打开都费劲,直接会提示“文件为完全加载”,这是因为Excel只能打开1048576(2^20)行。
在用程序处理这些数据的时候也很麻烦,很多工具库都不好使了,所以当时我只能先采用了手工分段的办法,将过大的XXX_MiFitness_hlth_center_fitness_data.csv文件分成好几段,每段都不超过1048576行,同时要保证每个分段的csv文件都是在0点附近分段的,因为里面写的是时间戳数据,并不是对用户友好的年月日时分秒格式,所以手工分段起来很费劲的。但是写了一篇告知原因的文章 为什么小米运动健康文件可能需要分段
这个周末想试着改用流的方式读取csv文件,经过调用终于找到了一个不用分段的方法了,就是用csv-parser
,逐行读取数据然后将它们暂存起来,然后待结束后拿到全部数据了。
官方给的demo代码如下:
const csv = require('csv-parser')
const fs = require('fs')
const results = [];
fs.createReadStream('data.csv')
.pipe(csv())
.on('data', (data) => results.push(data))
.on('end', () => {
console.log(results);
// [
// { NAME: 'Daffy Duck', AGE: '24' },
// { NAME: 'Bugs Bunny', AGE: '22' }
// ]
});
改用流读取文件的方式,即使是一个320W+行的csv文件也没问题,再也不用担心小米运动健康的文件太大了,自己也不用手动进行分段了,不但省力了还能避免人工操作的失误风险。
- 分类:
- 运动健康转换工具