diff --git a/configs/default/components/publishers/stream_file_exporter.yml b/configs/default/components/publishers/stream_file_exporter.yml index 3d83b20..e9a3581 100644 --- a/configs/default/components/publishers/stream_file_exporter.yml +++ b/configs/default/components/publishers/stream_file_exporter.yml @@ -14,6 +14,9 @@ separator: ',' # Adds additional line to output file enabling Excel to use different separator while loading (LOADED) export_separator_line_to_csv: False +# Adds additional line to output with header (LOADED) +export_header_to_csv: False + # Name of the file containing output values (LOADED) filename: 'outputs.txt' diff --git a/configs/vqa_med_2019/extend_answers.yml b/configs/vqa_med_2019/extend_answers.yml index 304a7c1..5640d24 100644 --- a/configs/vqa_med_2019/extend_answers.yml +++ b/configs/vqa_med_2019/extend_answers.yml @@ -66,8 +66,8 @@ pipeline: sample_number: 0 input_streams: indices,image_ids,tokenized_questions, - category_names,predicted_categories, - answers,tokenized_answers,predicted_answers + category_names,predicted_category_names, + answers,predicted_answers answer_exporter: priority: 100.5 @@ -75,10 +75,11 @@ pipeline: separator: '|' filename: 'answers.csv' export_separator_line_to_csv: True + export_header_to_csv: True input_streams: indices,image_ids,tokenized_questions, - category_names,predicted_categories, - answers,tokenized_answers,predicted_answers + category_names,predicted_category_names, + answers,predicted_answers submission_exporter: priority: 100.6 diff --git a/ptp/components/publishers/stream_file_exporter.py b/ptp/components/publishers/stream_file_exporter.py index 64cf46b..f656374 100644 --- a/ptp/components/publishers/stream_file_exporter.py +++ b/ptp/components/publishers/stream_file_exporter.py @@ -56,10 +56,14 @@ def __init__(self, name, config): abs_filename = path.join(self.app_state.log_dir, filename) self.file = open(abs_filename, 'w') - # Export additional line. + # Export additional line with separator. if self.config["export_separator_line_to_csv"]: self.file.write("sep={}\n".format(self.separator)) + # Export header - once, when we will process the first batch. + self.export_header = self.config["export_header_to_csv"] + + self.logger.info("Writing values from {} streams to {}".format(self.input_stream_keys, abs_filename)) @@ -100,6 +104,19 @@ def __call__(self, data_dict): else: absent_streams.append(stream_key) + # Export header - only once. + if self.export_header: + header = '' + for stream_key in self.input_stream_keys: + if stream_key in present_streams: + header = header + stream_key + self.separator + # Remove the last separator. + header = header[:-1] + '\n' + # Write header to file. + self.file.write(header) + # Do it only once. + self.export_header = False + # Export values to file. for i in range(batch_size): val_str = ''