{"id":37668256,"url":"https://github.com/evavanweenen/bike2csv","last_synced_at":"2026-01-17T22:47:27.332Z","repository":{"id":57415046,"uuid":"444043980","full_name":"evavanweenen/bike2csv","owner":"evavanweenen","description":"Convert FIT, PWX and TCX files from a bike computer to CSV format","archived":false,"fork":false,"pushed_at":"2022-11-14T10:58:43.000Z","size":24,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-30T05:02:04.905Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evavanweenen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-03T11:55:58.000Z","updated_at":"2022-11-14T10:55:29.000Z","dependencies_parsed_at":"2023-01-21T15:40:57.450Z","dependency_job_id":null,"html_url":"https://github.com/evavanweenen/bike2csv","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/evavanweenen/bike2csv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evavanweenen%2Fbike2csv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evavanweenen%2Fbike2csv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evavanweenen%2Fbike2csv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evavanweenen%2Fbike2csv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evavanweenen","download_url":"https://codeload.github.com/evavanweenen/bike2csv/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evavanweenen%2Fbike2csv/sbom","scorecard":{"id":385979,"data":{"date":"2025-08-11","repo":{"name":"github.com/evavanweenen/bike2csv","commit":"cb5ba16d0e3ac925724a4f1c54cb14b9890d6595"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/26 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-18T16:37:07.787Z","repository_id":57415046,"created_at":"2025-08-18T16:37:07.788Z","updated_at":"2025-08-18T16:37:07.788Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-16T12:00:42.688Z","updated_at":"2026-01-16T12:00:54.973Z","avatar_url":"https://github.com/evavanweenen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# bike2csv - Convert FIT, PWX and TCX files from a bike computer to CSV format\n\nParse any file obtained from a bike computer to a csv file.\nThis packages supports the following file extensions: `.fit`, `.FIT`, `.pwx` and `.tcx`.\nThe package might also work for converting files from other workout types (e.g. running, swimming) to csv, but has not been tested yet for this purpose. Feel free to do so and raise issues!\n\n## Installation\nThe package is available under pypi:\n```\npip install bike2csv\n```\n\n## Usage\nThis code unzips `.gz` files, then converts this unzipped (`.fit`, `.FIT`, `.pwx` or `.tcx`) file to a `.csv` file. The code is designed such that all different file extensions are converted to similar csv files (e.g. the same column names). This makes it easier for analyzing and merging the files later.\n\nIf your exported files have a `.gz` format, you can run the sample script underneath to *unzip* your files and convert them to csv.\n```python\nimport os\nfrom bike2csv.converter import Converter\n\nroot = 'data/'\nperson = 'Albert Einstein'\n\npath = dict(_path_zip = os.path.join(root, 'export', person), # where your .fit.gz files are saved\n            _path_fit = os.path.join(root, 'fit', person), # where your .fit files will be saved\n            _path_csv = os.path.join(root, 'csv', person)) # where the .csv files will be saved\n\nconverter = Converter(**path)\n\nfor file in converter.files:\n    converter.convert(file)\n```\n\nIf your exported files are *not zipped* anymore, you can run the following sample script to convert your files to csv. Note that the only difference is whether you give `_path_zip` to the `Converter` class. If you do not give it a `_path_zip`, it simply assumes your files are already unzipped.\n```python\nimport os\nfrom bike2csv.converter import Converter\n\nroot = 'data/'\nperson = 'Albert Einstein'\n\npath = dict(_path_fit = os.path.join(root, 'fit', person), # where your .fit files are be saved\n            _path_csv = os.path.join(root, 'csv', person)) # where the .csv files will be saved\n\nconverter = Converter(**path)\n\nfor file in converter.files:\n    converter.convert(file)\n```\nYou can of course adjust the script as you please. \nA sample script can also be found under `bin/run.py`.\n\nIf you are running into problems, feel welcome to contact the author (evanweenen@ethz.ch).\n\n## Attribution\nTo read `fit` files in python, this package makes use of the [fitparse](https://github.com/dtcooper/python-fitparse) package \u0026copy; David Cooper, Carey Metcalfe, 2021.\n\n## License\nThis code is \u0026copy; E. van Weenen, 2022, and it is made available under the MIT license enclosed with the software.\n\nOver and above the legal restrictions imposed by this license, if you use this software for an academic publication then you are obliged to provide proper attribution. \n```\nE. van Weenen. bike2csv: Convert files from a bike computer to CSV, v0.1 (2022). github.com/evavanweenen/bike2csv.\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevavanweenen%2Fbike2csv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevavanweenen%2Fbike2csv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevavanweenen%2Fbike2csv/lists"}