Skip to content
Snippets Groups Projects
csv_handler.py 2.08 KiB
Newer Older
Jiří Vrbka's avatar
Jiří Vrbka committed
import csv
from typing import List


class CsvHandler:

    @staticmethod
    def __removeInitSpace__(word: str) -> str:
        """
        Removes space at index 0 if present
        """
        if word.startswith(" "):
            return word[1:]
        else:
            return word

    @staticmethod
    def load(filepath: str) -> (List[str], List[dict]):
        """
        Loads csv file
        :param filepath: path to csv file
        :return: tuple of (list of header params, list of dict in format: {header1: value1, header2: value2,...})
        """
        item_list = []
        with open(filepath, 'r') as csvFile:
            header = csvFile.readline().split(",")

            for i in range(1, len(header)):
                header[i] = CsvHandler.__removeInitSpace__(header[i])

            reader = csv.reader(csvFile)
            for row in reader:
                for i in range(1, len(row)):
                    row[i] = CsvHandler.__removeInitSpace__(row[i])

                dic = {}
                for i in range(1, len(header)):
                    dic[header[i]] = row[i]
                item_list.append(dic)
        csvFile.close()

        return header, item_list

    @staticmethod
    def save(filepath: str, header: list, csv_as_list_dic: List[dict]) -> None:
        """
        Saves csv file into disk
        :param filepath: path to save csv file (with filename)
        :param header: header to save into file
        :param csv_as_list_dic: list of dic in format {header1: value1, header2: value2,...}
        :return: None
        """
        with open(filepath, 'w') as csvFile:
            header_line = ""
            for headerItem in header:
                header_line += headerItem + ","
            header_line = header_line[0:len(header_line) - 1]
            csvFile.write(header_line + "\n")

            for row in csv_as_list_dic:
                line = ""
                for headerItem in header:
                    line = line + row[headerItem] + ","
                line = line[0:len(line) - 1]
                csvFile.write(line + "\n")
        csvFile.close()