Python实现GarminConnect下载ZIP直接解压并重命名保存FIT文件
解决方案
可以利用Python标准库的io.BytesIO和zipfile.ZipFile实现内存中直接解压ZIP内容,无需写入磁盘,同时完成文件重命名保存,这是最符合Python风格且高效的方式:
import io import zipfile activities = api.get_activities_by_date( start_date.isoformat(), end_date.isoformat(), 'other') for activity in activities: activity_id = activity["activityId"] zip_data = api.download_activity( activity_id, dl_fmt=api.ActivityDownloadFormat.ORIGINAL ) # 将ZIP数据加载到内存文件对象中 with io.BytesIO(zip_data) as zip_buffer: with zipfile.ZipFile(zip_buffer, 'r') as zip_ref: # 快速定位ZIP中的.fit文件(兼容默认的activityId.fit及其他同名格式) fit_filename = next(name for name in zip_ref.namelist() if name.endswith('.fit')) # 读取fit文件的二进制内容 fit_data = zip_ref.read(fit_filename) # 写入重命名后的目标fit文件 output_fit_file = f"./{str(today)}.fit" with open(output_fit_file, "wb") as fb: fb.write(fit_data)
关键细节说明:
io.BytesIO:把下载的二进制ZIP数据包装成内存级文件对象,全程跳过磁盘IO,大幅提升处理速度zipfile.ZipFile:直接操作内存中的ZIP对象,无需先保存ZIP到本地磁盘- 生成器表达式定位文件:用
next(...)配合后缀匹配快速找到目标文件,写法简洁且高效 - 上下文管理器:全程使用
with语句自动管理资源,确保内存对象、文件句柄正确关闭,避免资源泄漏
内容的提问来源于stack exchange,提问作者kappamachine
相关产品推荐
相关产品推荐

