X-Git-Url: https://scm.cri.mines-paristech.fr/git/minwii.git/blobdiff_plain/a07152998dd50dab4e31a809158b3f5b430ac094..fd41523cab5f6d32f3222dd43c299f895a582450:/src/minwii/logfilereader.py diff --git a/src/minwii/logfilereader.py b/src/minwii/logfilereader.py index b7f84a1..50da29c 100755 --- a/src/minwii/logfilereader.py +++ b/src/minwii/logfilereader.py @@ -31,12 +31,12 @@ class LogFileReader(object) : classe utilitaire pour l'accès aux données d'un fichier de log MinWii. """ - def __init__(self, logfile) : + def __init__(self, logfile, mode='r') : """ logfile : chemin d'accès au fichier de log MinWii. le format supporté est actuellement la version 1.0 uniquement. """ if isinstance(logfile, StringTypes) : - self.logfile = open(logfile, 'r') + self.logfile = open(logfile, mode) else : self.logfile = logfile @@ -114,12 +114,14 @@ class LogFileReader(object) : for l in self.getBackwardLineIterator() : if l.startswith('EVT ') : break + else : + return None lastTicks = int(l.split(None, 2)[1]) return lastTicks def __del__(self) : - self.logfile.close() + self.close() def __iter__(self) : return self @@ -158,6 +160,36 @@ class LogFileReader(object) : while line : yield line.strip() line = br.readline() + + @inplaceread + def getMetadata(self) : + metadata = {} + self.next() # skip identification line. + line = self.next() + while line.startswith('METADATA ') : + line = line.split(None, 1)[1] + name, value = [v.strip() for v in line.split(':', 1)] + metadata[name] = value + line = self.next() + return metadata + + def setMetadata(self, metadata) : + f = self.logfile + f.seek(0) + before = f.readline() + after = f.read() + + lines = [] + for name, value in metadata : + lines.append('METADATA %s : %s' % (name, value.encode('utf-8'))) + metadata = '\n'.join(lines) + f.seek(0) + f.write(before) + f.write(metadata) + f.write(after) + + def close(self) : + self.logfile.close() @@ -230,5 +262,4 @@ class LogFilePlayer(PlayingScreenBase) : previousTicks = ticks self.stop() - \ No newline at end of file