Untitled
unknown
python
3 years ago
3.9 kB
7
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...