tcxreader-fork


Nametcxreader-fork JSON
Version 0.4.10 PyPI version JSON
download
home_pagehttps://github.com/Flavored4179/tcxreader
Summarytcxreader is a reader for Garmin’s TCX file format. It also works well with missing data! fork from https://github.com/alenrajsp/tcxreader
upload_time2024-08-13 13:35:45
maintainerNone
docs_urlNone
authorAlen Rajšp
requires_python>=3.6
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div width="200" style="background-color: white; width: 200px">
 <img width="200" style="margin-bottom:-8px" src="https://raw.githubusercontent.com/alenrajsp/tcxreader/main/.github/logo/logo-white-background.png">
</div>

**tcxreader** is a reader for Garmin's TCX file format. It also works well with missing data!

---

[![PyPI Version](https://img.shields.io/pypi/v/tcxreader.svg)](https://pypi.python.org/pypi/tcxreader)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/tcxreader.svg)
![PyPI - Downloads](https://img.shields.io/pypi/dm/tcxreader.svg)
[![Downloads](https://pepy.tech/badge/tcxreader)](https://pepy.tech/project/tcxreader)
![GitHub repo size](https://img.shields.io/github/repo-size/alenrajsp/tcxreader?style=flat-square)
[![GitHub license](https://img.shields.io/github/license/alenrajsp/tcxreader.svg)](https://github.com/alenrajsp/tcxreader/blob/master/LICENSE)
![GitHub commit activity](https://img.shields.io/github/commit-activity/w/alenrajsp/tcxreader.svg)
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/alenrajsp/tcxreader.svg)](http://isitmaintained.com/project/alenrajsp/tcxreader "Average time to resolve an issue")
[![Percentage of issues still open](http://isitmaintained.com/badge/open/alenrajsp/tcxreader.svg)](http://isitmaintained.com/project/alenrajsp/tcxreader "Percentage of issues still open")
[![All Contributors](https://img.shields.io/github/all-contributors/alenrajsp/tcxreader?color=ee8449&style=flat-square)](#contributors)
[![DOI](https://zenodo.org/badge/317671425.svg)](https://zenodo.org/doi/10.5281/zenodo.10940281)

## Objective

This is a simple TCX reader which can read Garmin TCX file extension files.  The following data is currently parsed: longitude,
latitude, elevation, time, distance, hr_value, cadence, watts, TPX_speed (extension). The following statistics are
calculated for each exercise: calories, hr_avg, hr_max, hr_min, avg_speed, start_time, end_time, duration, cadence_avg,
cadence_max, ascent, descent, distance, altitude_max, altitude_min, altitude_avg, steps and **author data**.

GitHub requests appreciated.
[pypi](https://pypi.org/project/tcxreader/)
[github](https://github.com/alenrajsp/tcxreader)

## Features

Allows parsing / reading of TCX files.

## Installation

```
pip install tcxreader
```

## Example

An example on how to use the package is shown below.

```python
from tcxreader.tcxreader import TCXReader, TCXTrackPoint

tcx_reader = TCXReader()
file_location = 'example_data/cross-country-skiing_activity_1.tcx'

"""
Minor warning, the read method also has a default parameter of only_gps (tcx_readerread(self, fileLocation: str, only_gps: bool = True)) set to true. If set to True erases any Trackpoints at the start and end of the exercise without GPS data.
"""

data: TCXExercise = tcx_reader.read(file_location)
""" Example output:
data = {TCXExercise}
 activity_type = {str} 'Other'
altitude_avg = {float} 2285.6744874553915
altitude_max = {float} 2337.60009765625
altitude_min = {float} 1257.5999755859375
ascent = {float} 1117.9996337890625
author = {TCXAuthor} [TCXAuthor]
avg_speed = {float} 8.534458975426906
cadence_avg = {NoneType} None
cadence_max = {NoneType} None
calories = {int} 532
descent = {float} 118.19970703125
distance = {float} 5692.01
duration = {float} 2401.0
end_time = {datetime} 2020-12-26 15:54:22
hr_avg = {float} 141.1954732510288
hr_max = {int} 172
hr_min = {int} 83
laps = {list: 2} [TCXLap]
lx_ext = {dict: 0} {}
max_speed = {float} 23.50810546875
start_time = {datetime} 2020-12-26 15:14:21
tpx_ext_stats = {dict: 2} {'Speed': {'min': 0.0, 'max': 6.1579999923706055, 'avg': 2.2930514418784482}, 'RunCadence': {'min': 0, 'max': 95, 'avg': 40.81069958847737}}
trackpoints = {list: 486} [TCXTrackpoint]
 
    {TCXTrackPoint} 
     cadence = {NoneType} None
     distance = {float} 7.329999923706055
     elevation = {float} 2250.60009765625
     hr_value = {int} 87
     latitude = {float} 46.49582446552813
     longitude = {float} 15.50408081151545
     time = {datetime} 2020-12-26 15:14:28
     tpx_ext = {dict: 2} {'Speed': 0.7459999918937683, 'RunCadence': 58}
"""
```
## Classes explanation

Below figure explains the classes of **tcxreader** and the data they contain.

### TCXReader()
User initializes the tcxreader by creating a **TCXReader** class instance. To read the data of a **TCX activity** the user must use
**TCXReader.read(*filename*)** method. 
The output of **read()** is an instance of **TCXExercise** class.

### TCXExercise
Primary class that holds cumulative data of an exercise. TCXExercise contains **all** the **trackpoints** of an activity
(e.g. from all the laps merged).

### TCXLap
One TCX activity may contain multiple laps. In the TCX file they are visible by the **Lap** tag.
```xml
<Lap StartTime="2020-12-26T15:50:22.000Z">
...
</Lap>
```
TCXLap contains all the trackpoints of a lap.

### TCXTrackpoint
A point in an exercise. Almost always has **latitude, longitude, time**. Can also have *cadence, distance, elevation, hr_value, tpx_ext*.
The tpx_ext refers to individual extensions contained inside the trackpoint. An example of the Trackpoint (pre-parsing) 
in the TCX file is shown below.

```xml
<Trackpoint>
    <Time>2020-12-26T15:50:21.000Z</Time>
    <Position>
        <LatitudeDegrees>46.49732105433941</LatitudeDegrees>
        <LongitudeDegrees>15.496849408373237</LongitudeDegrees>
    </Position>
    <AltitudeMeters>2277.39990234375</AltitudeMeters>
    <DistanceMeters>5001.52978515625</DistanceMeters>
    <HeartRateBpm>
        <Value>148</Value>
    </HeartRateBpm>
    <Extensions>
        <ns3:TPX>
            <ns3:Speed>3.3589999675750732</ns3:Speed>
            <ns3:RunCadence>61</ns3:RunCadence>
        </ns3:TPX>
    </Extensions>
</Trackpoint>
```

### tpx_ext
The data parsed from the **trackpoint TPX Extensions**. Example of data (pre-parsing) is shown below.
```xml
<Extensions>
    <ns3:TPX>
        <ns3:Speed>3.3589999675750732</ns3:Speed>
        <ns3:RunCadence>61</ns3:RunCadence>
    </ns3:TPX>
</Extensions>
```
Can occur **once (1x)** in every **trackpoint**.
### tpx_ext_stats
Contains **minimum**, **maximum** and **average** values of the recorded **tpx_ext** key.

### lx_ext
The data parsed from the **lap LX Extensions**. Example of data (pre-parsing) is shown below.
```xml
<Extensions>
    <ns3:LX>
        <ns3:AvgSpeed>1.0820000171661377</ns3:AvgSpeed>
        <ns3:Steps>65</ns3:Steps>
    </ns3:LX>
</Extensions>
```
Can occur **once (1x)** in every **lap**. 

The tags which do not contain **Avg, Min, Max** in their name (e.g. steps) are
summed in the **TCXExercise** **lx_ext** dictionary. 

All tags are recorded in the **TCXLap** **lx_ext** dictionary


### Schema of the data
<div width="100%" style="background-color: white; width: 100%">
 <img width="100%" style="margin-bottom:-8px" src="https://raw.githubusercontent.com/alenrajsp/tcxreader/7c9af6dc88f9d83a8c6751b454f118220ecfd9a1/.github/images/data-explanation.svg">
</div>

## Missing data handling
Due to the nature of the TCX file format, some data may be missing. The **tcxreader** can handle this in two ways:
1) If data is missing at a TCX point it is set to **None**. (*default*)
    - tcx_reader.read(file_location) (*default*)
    - tcx_reader.read(file_location, null_value_handling=1) (*default*)
    - tcx_reader.read(file_location, null_value_handling=NullValueHandling.NONE) (*default*)
2) If data is missing at one or more TCX points it is linearly interpolated.
   - tcx_reader.read(file_location, null_value_handling=2)
   - tcx_reader.read(file_location, null_value_handling=NullValueHandling.LINEAR_INTERPOLATION)
   
This behavior can be set in **TCXReader.read()** method by the **null_value_handling** parameter, where either **int** value or **NullValueHandling** enum can be passed.

## Datasets

Datasets available and used in the examples on the following links: [DATASET1](http://iztok-jr-fister.eu/static/publications/Sport5.zip), [DATASET2](http://iztok-jr-fister.eu/static/css/datasets/Sport.zip), [DATASET3](https://github.com/firefly-cpp/tcx-test-files).

## License

This package is distributed under the MIT License. This license can be found online
at [http://www.opensource.org/licenses/MIT](http://www.opensource.org/licenses/MIT).

## Related packages/frameworks

[1] [sport-activities-features: A minimalistic toolbox for extracting features from sports activity files written in Python](https://github.com/firefly-cpp/sport-activities-features)

[2] [AST-Monitor: A wearable Raspberry Pi computer for cyclists](https://github.com/firefly-cpp/AST-Monitor)

[3] [TCXReader.jl: Julia package designed for parsing TCX files](https://github.com/firefly-cpp/TCXReader.jl)

## Disclaimer

This framework is provided as-is, and there are no guarantees that it fits your purposes or that it is bug-free. Use it
at your own risk!

## Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tbody>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/alenrajsp"><img src="https://avatars.githubusercontent.com/u/27721714?v=4?s=100" width="100px;" alt="alenrajsp"/><br /><sub><b>alenrajsp</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/commits?author=alenrajsp" title="Code">💻</a> <a href="#maintenance-alenrajsp" title="Maintenance">🚧</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/fortysix2ahead"><img src="https://avatars.githubusercontent.com/u/40423757?v=4?s=100" width="100px;" alt="fortysix2ahead"/><br /><sub><b>fortysix2ahead</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/issues?q=author%3Afortysix2ahead" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://www.iztok-jr-fister.eu/"><img src="https://avatars.githubusercontent.com/u/1633361?v=4?s=100" width="100px;" alt="Iztok Fister Jr."/><br /><sub><b>Iztok Fister Jr.</b></sub></a><br /><a href="#data-firefly-cpp" title="Data">🔣</a> <a href="#mentoring-firefly-cpp" title="Mentoring">🧑‍🏫</a> <a href="#platform-firefly-cpp" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/alenrajsp/tcxreader/commits?author=firefly-cpp" title="Tests">⚠️</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/johnleeming"><img src="https://avatars.githubusercontent.com/u/13801070?v=4?s=100" width="100px;" alt="johnleeming"/><br /><sub><b>johnleeming</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/issues?q=author%3Ajohnleeming" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/rpstar"><img src="https://avatars.githubusercontent.com/u/10442282?v=4?s=100" width="100px;" alt="rpstar"/><br /><sub><b>rpstar</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/issues?q=author%3Arpstar" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://relatable.dev/"><img src="https://avatars.githubusercontent.com/u/1128313?v=4?s=100" width="100px;" alt="James Robinson"/><br /><sub><b>James Robinson</b></sub></a><br /><a href="#maintenance-jlrobins" title="Maintenance">🚧</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/johwiebe"><img src="https://avatars.githubusercontent.com/u/33023818?v=4?s=100" width="100px;" alt="johwiebe"/><br /><sub><b>johwiebe</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/issues?q=author%3Ajohwiebe" title="Bug reports">🐛</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://martin-ueding.de/"><img src="https://avatars.githubusercontent.com/u/976924?v=4?s=100" width="100px;" alt="Martin Ueding"/><br /><sub><b>Martin Ueding</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/issues?q=author%3Amartin-ueding" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/simonpickering"><img src="https://avatars.githubusercontent.com/u/1830341?v=4?s=100" width="100px;" alt="Simon Pickering"/><br /><sub><b>Simon Pickering</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/issues?q=author%3Asimonpickering" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/rwinklerwilkes"><img src="https://avatars.githubusercontent.com/u/2768609?v=4?s=100" width="100px;" alt="Rich Winkler"/><br /><sub><b>Rich Winkler</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/issues?q=author%3Arwinklerwilkes" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/ToonElewaut"><img src="https://avatars.githubusercontent.com/u/12350289?v=4?s=100" width="100px;" alt="Toon Elewaut"/><br /><sub><b>Toon Elewaut</b></sub></a><br /><a href="https://github.com/alenrajsp/tcxreader/commits?author=ToonElewaut" title="Code">💻</a></td>
    </tr>
  </tbody>
</table>

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Flavored4179/tcxreader",
    "name": "tcxreader-fork",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": null,
    "author": "Alen Raj\u0161p",
    "author_email": "alen.rajsp@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/f1/8c/314f7abc73387318c69ce12f5c72595c2a691159a220eaf157fedc1858c7/tcxreader_fork-0.4.10.tar.gz",
    "platform": null,
    "description": "<div width=\"200\" style=\"background-color: white; width: 200px\">\n <img width=\"200\" style=\"margin-bottom:-8px\" src=\"https://raw.githubusercontent.com/alenrajsp/tcxreader/main/.github/logo/logo-white-background.png\">\n</div>\n\n**tcxreader** is a reader for Garmin's TCX file format. It also works well with missing data!\n\n---\n\n[![PyPI Version](https://img.shields.io/pypi/v/tcxreader.svg)](https://pypi.python.org/pypi/tcxreader)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/tcxreader.svg)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/tcxreader.svg)\n[![Downloads](https://pepy.tech/badge/tcxreader)](https://pepy.tech/project/tcxreader)\n![GitHub repo size](https://img.shields.io/github/repo-size/alenrajsp/tcxreader?style=flat-square)\n[![GitHub license](https://img.shields.io/github/license/alenrajsp/tcxreader.svg)](https://github.com/alenrajsp/tcxreader/blob/master/LICENSE)\n![GitHub commit activity](https://img.shields.io/github/commit-activity/w/alenrajsp/tcxreader.svg)\n[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/alenrajsp/tcxreader.svg)](http://isitmaintained.com/project/alenrajsp/tcxreader \"Average time to resolve an issue\")\n[![Percentage of issues still open](http://isitmaintained.com/badge/open/alenrajsp/tcxreader.svg)](http://isitmaintained.com/project/alenrajsp/tcxreader \"Percentage of issues still open\")\n[![All Contributors](https://img.shields.io/github/all-contributors/alenrajsp/tcxreader?color=ee8449&style=flat-square)](#contributors)\n[![DOI](https://zenodo.org/badge/317671425.svg)](https://zenodo.org/doi/10.5281/zenodo.10940281)\n\n## Objective\n\nThis is a simple TCX reader which can read Garmin TCX file extension files.  The following data is currently parsed: longitude,\nlatitude, elevation, time, distance, hr_value, cadence, watts, TPX_speed (extension). The following statistics are\ncalculated for each exercise: calories, hr_avg, hr_max, hr_min, avg_speed, start_time, end_time, duration, cadence_avg,\ncadence_max, ascent, descent, distance, altitude_max, altitude_min, altitude_avg, steps and **author data**.\n\nGitHub requests appreciated.\n[pypi](https://pypi.org/project/tcxreader/)\n[github](https://github.com/alenrajsp/tcxreader)\n\n## Features\n\nAllows parsing / reading of TCX files.\n\n## Installation\n\n```\npip install tcxreader\n```\n\n## Example\n\nAn example on how to use the package is shown below.\n\n```python\nfrom tcxreader.tcxreader import TCXReader, TCXTrackPoint\n\ntcx_reader = TCXReader()\nfile_location = 'example_data/cross-country-skiing_activity_1.tcx'\n\n\"\"\"\nMinor warning, the read method also has a default parameter of only_gps (tcx_readerread(self, fileLocation: str, only_gps: bool = True)) set to true. If set to True erases any Trackpoints at the start and end of the exercise without GPS data.\n\"\"\"\n\ndata: TCXExercise = tcx_reader.read(file_location)\n\"\"\" Example output:\ndata = {TCXExercise}\n activity_type = {str} 'Other'\naltitude_avg = {float} 2285.6744874553915\naltitude_max = {float} 2337.60009765625\naltitude_min = {float} 1257.5999755859375\nascent = {float} 1117.9996337890625\nauthor = {TCXAuthor} [TCXAuthor]\navg_speed = {float} 8.534458975426906\ncadence_avg = {NoneType} None\ncadence_max = {NoneType} None\ncalories = {int} 532\ndescent = {float} 118.19970703125\ndistance = {float} 5692.01\nduration = {float} 2401.0\nend_time = {datetime} 2020-12-26 15:54:22\nhr_avg = {float} 141.1954732510288\nhr_max = {int} 172\nhr_min = {int} 83\nlaps = {list: 2} [TCXLap]\nlx_ext = {dict: 0} {}\nmax_speed = {float} 23.50810546875\nstart_time = {datetime} 2020-12-26 15:14:21\ntpx_ext_stats = {dict: 2} {'Speed': {'min': 0.0, 'max': 6.1579999923706055, 'avg': 2.2930514418784482}, 'RunCadence': {'min': 0, 'max': 95, 'avg': 40.81069958847737}}\ntrackpoints = {list: 486} [TCXTrackpoint]\n \n    {TCXTrackPoint} \n     cadence = {NoneType} None\n     distance = {float} 7.329999923706055\n     elevation = {float} 2250.60009765625\n     hr_value = {int} 87\n     latitude = {float} 46.49582446552813\n     longitude = {float} 15.50408081151545\n     time = {datetime} 2020-12-26 15:14:28\n     tpx_ext = {dict: 2} {'Speed': 0.7459999918937683, 'RunCadence': 58}\n\"\"\"\n```\n## Classes explanation\n\nBelow figure explains the classes of **tcxreader** and the data they contain.\n\n### TCXReader()\nUser initializes the tcxreader by creating a **TCXReader** class instance. To read the data of a **TCX activity** the user must use\n**TCXReader.read(*filename*)** method. \nThe output of **read()** is an instance of **TCXExercise** class.\n\n### TCXExercise\nPrimary class that holds cumulative data of an exercise. TCXExercise contains **all** the **trackpoints** of an activity\n(e.g. from all the laps merged).\n\n### TCXLap\nOne TCX activity may contain multiple laps. In the TCX file they are visible by the **Lap** tag.\n```xml\n<Lap StartTime=\"2020-12-26T15:50:22.000Z\">\n...\n</Lap>\n```\nTCXLap contains all the trackpoints of a lap.\n\n### TCXTrackpoint\nA point in an exercise. Almost always has **latitude, longitude, time**. Can also have *cadence, distance, elevation, hr_value, tpx_ext*.\nThe tpx_ext refers to individual extensions contained inside the trackpoint. An example of the Trackpoint (pre-parsing) \nin the TCX file is shown below.\n\n```xml\n<Trackpoint>\n    <Time>2020-12-26T15:50:21.000Z</Time>\n    <Position>\n        <LatitudeDegrees>46.49732105433941</LatitudeDegrees>\n        <LongitudeDegrees>15.496849408373237</LongitudeDegrees>\n    </Position>\n    <AltitudeMeters>2277.39990234375</AltitudeMeters>\n    <DistanceMeters>5001.52978515625</DistanceMeters>\n    <HeartRateBpm>\n        <Value>148</Value>\n    </HeartRateBpm>\n    <Extensions>\n        <ns3:TPX>\n            <ns3:Speed>3.3589999675750732</ns3:Speed>\n            <ns3:RunCadence>61</ns3:RunCadence>\n        </ns3:TPX>\n    </Extensions>\n</Trackpoint>\n```\n\n### tpx_ext\nThe data parsed from the **trackpoint TPX Extensions**. Example of data (pre-parsing) is shown below.\n```xml\n<Extensions>\n    <ns3:TPX>\n        <ns3:Speed>3.3589999675750732</ns3:Speed>\n        <ns3:RunCadence>61</ns3:RunCadence>\n    </ns3:TPX>\n</Extensions>\n```\nCan occur **once (1x)** in every **trackpoint**.\n### tpx_ext_stats\nContains **minimum**, **maximum** and **average** values of the recorded **tpx_ext** key.\n\n### lx_ext\nThe data parsed from the **lap LX Extensions**. Example of data (pre-parsing) is shown below.\n```xml\n<Extensions>\n    <ns3:LX>\n        <ns3:AvgSpeed>1.0820000171661377</ns3:AvgSpeed>\n        <ns3:Steps>65</ns3:Steps>\n    </ns3:LX>\n</Extensions>\n```\nCan occur **once (1x)** in every **lap**. \n\nThe tags which do not contain **Avg, Min, Max** in their name (e.g. steps) are\nsummed in the **TCXExercise** **lx_ext** dictionary. \n\nAll tags are recorded in the **TCXLap** **lx_ext** dictionary\n\n\n### Schema of the data\n<div width=\"100%\" style=\"background-color: white; width: 100%\">\n <img width=\"100%\" style=\"margin-bottom:-8px\" src=\"https://raw.githubusercontent.com/alenrajsp/tcxreader/7c9af6dc88f9d83a8c6751b454f118220ecfd9a1/.github/images/data-explanation.svg\">\n</div>\n\n## Missing data handling\nDue to the nature of the TCX file format, some data may be missing. The **tcxreader** can handle this in two ways:\n1) If data is missing at a TCX point it is set to **None**. (*default*)\n    - tcx_reader.read(file_location) (*default*)\n    - tcx_reader.read(file_location, null_value_handling=1) (*default*)\n    - tcx_reader.read(file_location, null_value_handling=NullValueHandling.NONE) (*default*)\n2) If data is missing at one or more TCX points it is linearly interpolated.\n   - tcx_reader.read(file_location, null_value_handling=2)\n   - tcx_reader.read(file_location, null_value_handling=NullValueHandling.LINEAR_INTERPOLATION)\n   \nThis behavior can be set in **TCXReader.read()** method by the **null_value_handling** parameter, where either **int** value or **NullValueHandling** enum can be passed.\n\n## Datasets\n\nDatasets available and used in the examples on the following links: [DATASET1](http://iztok-jr-fister.eu/static/publications/Sport5.zip), [DATASET2](http://iztok-jr-fister.eu/static/css/datasets/Sport.zip), [DATASET3](https://github.com/firefly-cpp/tcx-test-files).\n\n## License\n\nThis package is distributed under the MIT License. This license can be found online\nat [http://www.opensource.org/licenses/MIT](http://www.opensource.org/licenses/MIT).\n\n## Related packages/frameworks\n\n[1] [sport-activities-features: A minimalistic toolbox for extracting features from sports activity files written in Python](https://github.com/firefly-cpp/sport-activities-features)\n\n[2] [AST-Monitor: A wearable Raspberry Pi computer for cyclists](https://github.com/firefly-cpp/AST-Monitor)\n\n[3] [TCXReader.jl: Julia package designed for parsing TCX files](https://github.com/firefly-cpp/TCXReader.jl)\n\n## Disclaimer\n\nThis framework is provided as-is, and there are no guarantees that it fits your purposes or that it is bug-free. Use it\nat your own risk!\n\n## Contributors\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/alenrajsp\"><img src=\"https://avatars.githubusercontent.com/u/27721714?v=4?s=100\" width=\"100px;\" alt=\"alenrajsp\"/><br /><sub><b>alenrajsp</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/commits?author=alenrajsp\" title=\"Code\">\ud83d\udcbb</a> <a href=\"#maintenance-alenrajsp\" title=\"Maintenance\">\ud83d\udea7</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fortysix2ahead\"><img src=\"https://avatars.githubusercontent.com/u/40423757?v=4?s=100\" width=\"100px;\" alt=\"fortysix2ahead\"/><br /><sub><b>fortysix2ahead</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/issues?q=author%3Afortysix2ahead\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.iztok-jr-fister.eu/\"><img src=\"https://avatars.githubusercontent.com/u/1633361?v=4?s=100\" width=\"100px;\" alt=\"Iztok Fister Jr.\"/><br /><sub><b>Iztok Fister Jr.</b></sub></a><br /><a href=\"#data-firefly-cpp\" title=\"Data\">\ud83d\udd23</a> <a href=\"#mentoring-firefly-cpp\" title=\"Mentoring\">\ud83e\uddd1\u200d\ud83c\udfeb</a> <a href=\"#platform-firefly-cpp\" title=\"Packaging/porting to new platform\">\ud83d\udce6</a> <a href=\"https://github.com/alenrajsp/tcxreader/commits?author=firefly-cpp\" title=\"Tests\">\u26a0\ufe0f</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/johnleeming\"><img src=\"https://avatars.githubusercontent.com/u/13801070?v=4?s=100\" width=\"100px;\" alt=\"johnleeming\"/><br /><sub><b>johnleeming</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/issues?q=author%3Ajohnleeming\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rpstar\"><img src=\"https://avatars.githubusercontent.com/u/10442282?v=4?s=100\" width=\"100px;\" alt=\"rpstar\"/><br /><sub><b>rpstar</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/issues?q=author%3Arpstar\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://relatable.dev/\"><img src=\"https://avatars.githubusercontent.com/u/1128313?v=4?s=100\" width=\"100px;\" alt=\"James Robinson\"/><br /><sub><b>James Robinson</b></sub></a><br /><a href=\"#maintenance-jlrobins\" title=\"Maintenance\">\ud83d\udea7</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/johwiebe\"><img src=\"https://avatars.githubusercontent.com/u/33023818?v=4?s=100\" width=\"100px;\" alt=\"johwiebe\"/><br /><sub><b>johwiebe</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/issues?q=author%3Ajohwiebe\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://martin-ueding.de/\"><img src=\"https://avatars.githubusercontent.com/u/976924?v=4?s=100\" width=\"100px;\" alt=\"Martin Ueding\"/><br /><sub><b>Martin Ueding</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/issues?q=author%3Amartin-ueding\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/simonpickering\"><img src=\"https://avatars.githubusercontent.com/u/1830341?v=4?s=100\" width=\"100px;\" alt=\"Simon Pickering\"/><br /><sub><b>Simon Pickering</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/issues?q=author%3Asimonpickering\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rwinklerwilkes\"><img src=\"https://avatars.githubusercontent.com/u/2768609?v=4?s=100\" width=\"100px;\" alt=\"Rich Winkler\"/><br /><sub><b>Rich Winkler</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/issues?q=author%3Arwinklerwilkes\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ToonElewaut\"><img src=\"https://avatars.githubusercontent.com/u/12350289?v=4?s=100\" width=\"100px;\" alt=\"Toon Elewaut\"/><br /><sub><b>Toon Elewaut</b></sub></a><br /><a href=\"https://github.com/alenrajsp/tcxreader/commits?author=ToonElewaut\" title=\"Code\">\ud83d\udcbb</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "tcxreader is a reader for Garmin\u2019s TCX file format. It also works well with missing data! fork from https://github.com/alenrajsp/tcxreader",
    "version": "0.4.10",
    "project_urls": {
        "Homepage": "https://github.com/Flavored4179/tcxreader"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d6479c47963d5dda2dd939b608e0b422104c59c5e1f7e580d05bf567031254f3",
                "md5": "cda7660f258e0710f1a00d79da5cb924",
                "sha256": "1e346b9d9f1e737fc49cdbb3eed76a0ff8d0fd293f88bebcdfdabff86d69ef1f"
            },
            "downloads": -1,
            "filename": "tcxreader_fork-0.4.10-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "cda7660f258e0710f1a00d79da5cb924",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 14107,
            "upload_time": "2024-08-13T13:35:44",
            "upload_time_iso_8601": "2024-08-13T13:35:44.333810Z",
            "url": "https://files.pythonhosted.org/packages/d6/47/9c47963d5dda2dd939b608e0b422104c59c5e1f7e580d05bf567031254f3/tcxreader_fork-0.4.10-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f18c314f7abc73387318c69ce12f5c72595c2a691159a220eaf157fedc1858c7",
                "md5": "ad1092af96c1121cd67b4dbff2111e5f",
                "sha256": "cf96cad37ac4aaeec2e85f17d9f931924c4112f3f84b4bcbae19a577bfceaa0a"
            },
            "downloads": -1,
            "filename": "tcxreader_fork-0.4.10.tar.gz",
            "has_sig": false,
            "md5_digest": "ad1092af96c1121cd67b4dbff2111e5f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 17066,
            "upload_time": "2024-08-13T13:35:45",
            "upload_time_iso_8601": "2024-08-13T13:35:45.996408Z",
            "url": "https://files.pythonhosted.org/packages/f1/8c/314f7abc73387318c69ce12f5c72595c2a691159a220eaf157fedc1858c7/tcxreader_fork-0.4.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-13 13:35:45",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Flavored4179",
    "github_project": "tcxreader",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "tcxreader-fork"
}
        
Elapsed time: 1.10284s