diff --git a/bob/bio/base/tools/scoring.py b/bob/bio/base/tools/scoring.py index faf09422340c54b4dd14bfd1dc8788024427c046..778b4f46e530c56fc86e9be642c4218fb0a556c6 100644 --- a/bob/bio/base/tools/scoring.py +++ b/bob/bio/base/tools/scoring.py @@ -98,6 +98,13 @@ def _close_written(score_file, f, write_compressed): # close the file f.close() +def _delete(score_file, write_compressed): + """Deletes the (compressed) score_file""" + if write_compressed: + score_file += '.tar.bz2' + if os.path.isfile(score_file): + os.remove(score_file) + def _save_scores(score_file, scores, probe_objects, client_id, write_compressed): """Saves the scores of one model into a text file that can be interpreted by :py:func:`bob.measure.load.split_four_column`.""" @@ -441,22 +448,29 @@ def zt_norm(groups = ['dev', 'eval'], write_compressed = False, allow_missing_fi def _concat(score_files, output, write_compressed, model_ids): """Concatenates a list of score files into a single score file.""" - f = _open_to_write(output, write_compressed) - - # Concatenates the scores - if model_ids is None: - for score_file in score_files: - i = _open_to_read(score_file) - f.write(i.read()) + try: + f = _open_to_write(output, write_compressed) + + # Concatenates the scores + if model_ids is None: + for score_file in score_files: + i = _open_to_read(score_file) + f.write(i.read()) + else: + for score_file, model_id in zip(score_files, model_ids): + i = _open_to_read(score_file) + for l in i: + s = l.split() + s.insert(1, str(model_id)) + f.write(" ".join(s) + "\n") + + except: + logger.error("Concatenation failed; removing result file %s", output) + _close_written(output, f, write_compressed) + _delete(output, write_compressed) + raise else: - for score_file, model_id in zip(score_files, model_ids): - i = _open_to_read(score_file) - for l in i: - s = l.split() - s.insert(1, str(model_id)) - f.write(" ".join(s) + "\n") - - _close_written(output, f, write_compressed) + _close_written(output, f, write_compressed)