def get_data(self, outfile): if os.stat(self.raw_data_file).st_size == 0: self.logger.warning('"{}" appears to be empty'.format( self.raw_data_file)) return all_channels = [c.label for c in self.list_channels()] active_channels = [c.label for c in self.active_channels] active_indexes = [all_channels.index(ac) for ac in active_channels] with csvreader(self.raw_data_file, skipinitialspace=True) as reader: with csvwriter(outfile) as writer: writer.writerow(active_channels) header = next(reader) ts_index = header.index('timestamp ms') for row in reader: output_row = [] for i in active_indexes: if i == ts_index: # Leave time in ms output_row.append(float(row[i])) else: # Convert rest into standard units. output_row.append(float(row[i]) / 1000) writer.writerow(output_row) return MeasurementsCsv(outfile, self.active_channels, self.sample_rate_hz)
def get_data(self, output_file): temp_file = tempfile.mktemp() self.target.pull(self.on_target_file, temp_file) self.target.remove(self.on_target_file) with csvreader(temp_file) as reader: headings = next(reader) # Figure out which columns from the collected csv we actually want select_columns = [] for chan in self.active_channels: try: select_columns.append(headings.index(chan.name)) except ValueError: raise HostError('Channel "{}" is not in {}'.format(chan.name, temp_file)) with csvwriter(output_file) as writer: write_headings = ['{}_{}'.format(c.site, c.kind) for c in self.active_channels] writer.writerow(write_headings) for row in reader: write_row = [row[c] for c in select_columns] writer.writerow(write_row) return MeasurementsCsv(output_file, self.active_channels, sample_rate_hz=10)
def get_data(self, outfile): # pylint: disable=R0914 self.logger.debug("Parse data and compute consumed energy") self.parser.prepare(self.output_file_raw, self.output_file, self.output_file_figure) self.parser.parse_aep() self.parser.unprepare() skip_header = 1 all_channels = [c.label for c in self.list_channels()] active_channels = [c.label for c in self.active_channels] active_indexes = [all_channels.index(ac) for ac in active_channels] with csvreader(self.output_file, delimiter=' ') as reader: with csvwriter(outfile) as writer: for row in reader: if skip_header == 1: writer.writerow(active_channels) skip_header = 0 continue if len(row) < len(active_channels): continue # all data are in micro (seconds/watt) new = [float(row[i]) / 1000000 for i in active_indexes] writer.writerow(new) self.output_fd_error.close() shutil.rmtree(self.output_directory) return MeasurementsCsv(outfile, self.active_channels, self.sample_rate_hz)
def take_measurement(self): result = [] output = self.target.execute(self.command2).split() with csvreader(output) as reader: headings = next(reader) values = next(reader) for chan in self.active_channels: value = values[headings.index(chan.name)] result.append(Measurement(value, chan)) return result
def _load_channels(self): header = [] with csvreader(self.path) as reader: header = next(reader) self.channels = [] for entry in header: for mt in MEASUREMENT_TYPES: suffix = '_{}'.format(mt) if entry.endswith(suffix): site = entry[:-len(suffix)] measure = mt break else: if entry in MEASUREMENT_TYPES: site = None measure = entry else: site = entry measure = 'unknown' chan = InstrumentChannel(site, measure) self.channels.append(chan)
def _iter_rows(self): with csvreader(self.path) as reader: next(reader) # headings for row in reader: yield row