"""Incremental output file interface.
This module includes the interface to implement any incremental output file.
Classes
-------
IncrementalOutputFile
Incremental output file interface.
"""
#
# Modules
# =============================================================================
# Standard
from abc import ABC, abstractmethod
import copy
#
# Authorship & Credits
# =============================================================================
__author__ = 'Bernardo Ferreira (bernardo_ferreira@brown.edu)'
__credits__ = ['Bernardo Ferreira', ]
__status__ = 'Stable'
# =============================================================================
#
# =============================================================================
[docs]class IncrementalOutputFile(ABC):
"""Incremental output file interface.
Attributes
----------
_file_path : str
Output file path.
_header : list[str]
List containing the header of each column (str).
_col_width : int
Output file column width.
Methods
-------
init_file(self)
*abstract*: Open output file and write file header.
write_file(self)
*abstract*: Write output file.
rewind_file(self, rewind_inc)
Rewind output file.
"""
[docs] @abstractmethod
def __init__(self, file_path):
"""Constructor.
Parameters
----------
file_path : str
Output file path.
"""
pass
# -------------------------------------------------------------------------
[docs] @abstractmethod
def init_file(self):
"""Open output file and write file header."""
pass
# -------------------------------------------------------------------------
[docs] @abstractmethod
def write_file(self):
"""Write output file."""
pass
# -------------------------------------------------------------------------
[docs] def rewind_file(self, rewind_inc):
"""Rewind output file.
Parameters
----------
rewind_inc : int
Increment associated with the rewind state.
"""
# Open output file and read lines (read)
file_lines = open(self._file_path, 'r').readlines()
# Set output file last line
last_line = 1 + rewind_inc
file_lines[last_line] = file_lines[last_line][:-1]
# Open output file (write mode) and write data
open(self._file_path, 'w').writelines(file_lines[: last_line + 1])