def test_fitfile_parses_with_correct_number_of_recs_defs_and_file_size_and_CRC(self): fit = FitFile(testfile('sample-activity.fit')) fit.parse() self.assertEquals(len(fit.records), 3228) self.assertEquals(len(fit.definitions), 9) self.assertEquals(fit._file_size, 104761) self.assertEquals(fit._crc, 0x75C5)
#!/usr/bin/env python from fitparse.base import FitFile fit_file = FitFile('example.fit') fit_file.parse() records = fit_file.get_records_as_dicts() for record in records: print '\nRecord:' for key, value in record.iteritems(): print ' - %s: %s' % (key.replace('_', ' ').capitalize(), value)
def FitToDataTable(MyFile, Fields): File = FitFile(MyFile) File.parse() ##obtention des enregistrements Values = File.get_messages() ##iteration sur les header inutiles jusqu'a l'annonce du fichier cycling Records = ExtractRecords(Values) # Continue = True # while Continue : # Record = Values.next() # try : # if Record["sport"] == "cycling" : # Continue = False # except KeyError : # pass Datas = [] i = 0 #iteration sur les enregistrements Prec = None for Record in Records: # #print(Record) # if Record.has_key("product")==True : # #rendu ici il n'y a plus d'enregistrements # try : # Record = Values.next() # if Record.has_key("event_type") == False : # print("Hey, we have to continue !") # else : # break # except : # break # if Record.has_key("event_type") == False : # #sauter les evenements indiquant le 5km # #transformer le timestamp moche en un beau chiffre TIME = time.mktime(Record["timestamp"].timetuple()) + ( Config["FitFile"]["Decalage"] * 60) #TIME = Record["timestamp"] + (Config["FitFile"]["Decalage"]*60*60) Record["timestamp"] = int(TIME) #print(Fields) #try : Row = [] NoMissing = True for Field in Fields: if Field.RealName not in Record: Row.append(Field.Default) #print(" Missing this Field : "+Field.RealName) NoMissing = False else: try: Row.append(Record[Field.RealName]) except KeyError as e: print("This Key is missing : " + Field.RealName) print(Record) raise e #Row = list((Record[Field.RealName] for Field in Fields)) # except : # print("Error : ") # print(Record) # print(Row) # raise KeyError Row.insert(0, i) Datas.append(tuple(Row)) i += 1 if NoMissing: Prec = Record if Prec is None: raise ValueError( "Prec is none, so we have a problem with this file : " + MyFile) #obtention des types des enregistrements Types = [VL.GessNumpyType(str(Prec[Field.RealName])) for Field in Fields] FieldNames = [Field.Name for Field in Fields] FieldNames.insert(0, "OID") Types.insert(0, "int32") #print(Types) BD = VL.JDataTable(FieldNames, Types, "OID", Datas) return BD