garmindb2bikecsv.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/usr/local/bin/python
  2. """
  3. Mit GarminDB importierte Radfahr-activities in eine CSV-Datei schreiben
  4. """
  5. import argparse
  6. import json
  7. import os
  8. import pandas as pd
  9. from pandas import DataFrame, Series
  10. import cols2drop
  11. tours = []
  12. df = DataFrame()
  13. if __name__ == "__main__":
  14. parser = argparse.ArgumentParser(description="Write GarminDB cycling data to csv-file")
  15. parser.add_argument("activities_dir", type=str, help="directory of activities files")
  16. parser.add_argument("csv_file", type=str, help="output csv file", default='garmin_bike.csv')
  17. args = parser.parse_args()
  18. cnt = 0
  19. for subdir, dirs, files in os.walk(args.activities_dir):
  20. for file in files:
  21. filepath = subdir + os.sep + file
  22. if filepath.endswith(".json") and "#" not in filepath and "_details_" not in filepath and "_types" not in filepath :
  23. with open(filepath) as f:
  24. activity_json = json.load(f)
  25. if activity_json['activityType']['parentTypeId'] == 2: # Radfahren
  26. activity_json['startTimeLocal'] = pd.to_datetime(activity_json['startTimeLocal'])
  27. tours.append(activity_json)
  28. cnt = cnt + 1
  29. df = DataFrame(tours)
  30. df.drop( cols2drop.cols2drop.split() , axis=1, inplace=True) # drop unnecessary columns
  31. df['distance'] = round(df['distance'], 3)
  32. df['maxSpeed'] = round(df['maxSpeed'], 2)
  33. df['averageSpeed'] = round(df['averageSpeed'], 4)
  34. df['elevationGain'] = round(df['elevationGain'],0)
  35. df['maxElevation'] = round(df['maxElevation'],0 )
  36. df['activityTrainingLoad'] = round(df['activityTrainingLoad'],0)
  37. df['movingDuration'] = round(df['movingDuration'], 0)
  38. df['duration'] = round(df['duration'], 0)
  39. df['distance'] = round(df['distance'], 0)
  40. df.to_csv(args.csv_file)