Untitled

 avatar
unknown
python
2 years ago
3.9 kB
3
Indexable
import dataclasses
import json
from abc import ABC, abstractmethod
from typing import List, Dict, Tuple
import os
import csv


class GenericSerializer(ABC):

    @abstractmethod
    def load_csv(self, path):
        pass

    @abstractmethod
    def write_csv(self, path, data: List):
        pass

    @abstractmethod
    def update_csv(self, path, data: List):
        pass

    @abstractmethod
    def load_json(self, path):
        pass

    @abstractmethod
    def write_json(self, path, data: (List, Dict)):
        pass

    @abstractmethod
    def update_json(self, path, data: (List, Dict)):
        pass

    @abstractmethod
    def write_object_fields(self, path, obj):
        pass

class Serializer(GenericSerializer):

    def write_csv(self, path, data: List):
        with open(path, "w") as f:
            if ".csv" not in path:
                raise ValueError('Błędny format pliku')
            else:
                writer = csv.writer(f)
                if isinstance(data, list) == False:
                    raise TypeError('Błędny typ danych')
                else:
                    for row in data:
                        writer.writerow(row)

    def load_csv(self, path):
        if os.path.isfile(path) == False:
            raise IOError('Podany plik csv nie istnieje')
        else:
            with open(path, "r") as f:
                reader = csv.reader(f)
                reader_list = []
                for row in reader:
                    reader_list.append(row)
                return reader_list


    def update_csv(self, path, data: List):
        if os.path.isfile(path) == False:
            raise IOError('Podany plik csv nie istnieje, nie mozna go zaktualizowac!')
        else:
            with open(path, "a") as f:
                writer = csv.writer(f)
                if isinstance(data, list) == False:
                    raise TypeError('Błędny typ danych')
                else:
                    for row in data:
                        writer.writerow(row)


    def load_json(self, path):
        if os.path.isfile(path) == False:
            raise IOError('Podany plik json nie istnieje.')
        else:
            with open(path, "r") as f:
                return json.load(f)




    def write_json(self, path, data: (List, Tuple)):
        with open(path, 'w') as f:
            if ".json" not in path:
                raise ValueError('Błędny format pliku')
            elif isinstance(data, list) == False and isinstance(data, tuple) == False:
                raise TypeError('Błędny typ danych')
            else:
                i = 1
                dictionary = {}
                for element in data:
                    dictionary[i] = element
                    i += 1
                json.dump(dictionary, f)



    def update_json(self, path, data: (List, Tuple)):
        if os.path.isfile(path) == False:
            raise IOError('Podany plik json nie istnieje, nie mozna go zaktualizowac.')
        else:
            with open(path, "a") as f:
                i = 1
                dictionary = {}
                for element in data:
                    dictionary[i] = element
                    i += 1
                json.dump(dictionary, f)

    def write_object_fields(self, path, obj):
        with open(path, "w") as f:
            fields = vars(obj)
            json.dump(fields, f)

class AnotherClass():
    def __init__(self, a, b, c, d):
        self.a = a
        self.b = b
        self.c = c
        self.d = d




data = [["Folek", "jest", "kary"], ["Aqua", "jest", "gniada"], ["Cassiano", "jest", "siwy"]]
obiekt = Serializer()
data_2 = [["Chacitol", "jest", "gniady"]]

obiekt.write_json("data_object.json", data)
obiekt.update_json("data_object.json", data_2)


obj = AnotherClass(1, 2, 3, "Ala")
obiekt.write_object_fields("json_object_fields.json", obj)
Editor is loading...