Skip to main content

FIT file tool

Project description

fittie

Parse Garmin .FIT files

PyPI version

Installation

Fittie is available on pypi and can be installed with the following command.

$ pip install fittie

Example

from fittie import decode

if __name__ == "__main__":
    fitfile = decode("path/to/fit/file.fit")
        
    # Example: get average heart rate
    print(fitfile.average_heart_rate)

    # Loop through all data messages:
    for data_message in fitfile:
        print(data_message)

For more information and examples, check the documentation

Fitfile

Usage

Decoding / parsing a FIT file is done through the decode function in the fittie.fitfile package. It accepts the following types of arguments:

  • A file path string
  • A file opened in "rb" mode
  • A buffered reader, BinaryIO or BytesIO
# Examples
from io import BytesIO
from fittie.fitfile import decode

fitfile_1 = decode("/path/to/fit/file.fit")         # Path to file

fitfile_2 = decode(BytesIO(...))                    # BytesIO

with open("/path/to/fit/file.fit", "rb") as f:      # File opened in rb mode
    fitfile_3 = decode(f)

To view the available message types in the fitfile, use the available_message_types property. It will return a list of message type keys. These keys can be used to retrieve all messages of a certain kind. After retrieving the available message types, the messages can be retrieved using get_messages_by_type.

fitfile = decode("/path/to/fit/file.fit")

types = fitfile.available_message_types
# e.g. [ 'file_id', 'device_info', 'record', 'event', 'lap', 'session', 'activity']
messages = fitfile.get_messages_by_type('record')  # Returns a list of `DataMessage`

Alternatively, you can interact with the messages property of fitfile directly, this is a simple dict.

File types

All FIT files should contain a file id message that describes the type of file. Common file types are activity, workout and course. More file types can be found in fit_types.py.

To retrieve the type of the decoded fitfile, use the .file_type property.

assert fitfile.file_type == "activity"

CRC

A crc check is done by default, but can be disabled by providing calculate_crc=False to the decode function to improve speed.

For example, on the same FIT file with 58297 data messages, decoding with crc takes 0.029 seconds and without crc it only takes 0.014 seconds.

DataMessages

To access data in a DataMessage, use the fields property. This will return a dict with all the values inside the message.

fitfile = decode("/path/to/fit/file.fit")

for record in fitfile.get_messages_by_type("record")[:5]:
    print(record.fields)

# {'timestamp': 1044776016}
# {'timestamp': 1044776016, 'heart_rate': 117}
# {'timestamp': 1044776017, 'heart_rate': 116}
# {'timestamp': 1044776017, 'heart_rate': 115}
# {'timestamp': 1044776018, 'heart_rate': 115}

TODO:

  • Handle component fields
  • Handle accumulators
  • Handle chained FIT files
  • Handle compressed timestamps
  • move record_header into record, instead of reading it separately
  • encoding

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fittie-0.8.1.tar.gz (91.7 kB view details)

Uploaded Source

Built Distribution

fittie-0.8.1-py3-none-any.whl (104.0 kB view details)

Uploaded Python 3

File details

Details for the file fittie-0.8.1.tar.gz.

File metadata

  • Download URL: fittie-0.8.1.tar.gz
  • Upload date:
  • Size: 91.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for fittie-0.8.1.tar.gz
Algorithm Hash digest
SHA256 fc68af8badbc08436f42ae9f4ed4afdac67237759c6d0c2b88af53631c965608
MD5 a68fd79111d705d2ce7e362905a6ed0b
BLAKE2b-256 c38beaa185961fc61e85cbb99960432a16811af535a2e6a2b0aa447d0f777cb9

See more details on using hashes here.

File details

Details for the file fittie-0.8.1-py3-none-any.whl.

File metadata

  • Download URL: fittie-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 104.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for fittie-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4932a31735201b057ef8a22d5a2b2fee21266d13b1645b9398b8c6a82e4c0b0d
MD5 7632a4a0d93f53a410bdb81ee122381b
BLAKE2b-256 f076aa26892aa08313c2053f76840754d096d95d5147ae979f4265ac330cd092

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page