• Ich habe ja hier im Beitrag schon mal versucht zu erklären, wie man Daten in Python lädt und speichert. Als Beispiel dient mir meine BackupList. So lege ich das in meinen beiden Python Projekten meines Restic UI ab.

    Anhand dieses Beispieles habe ich mal eine Klasse gebaut, die das alles enthält. So in etwa ist das auch in meinen Projekten drin, da ich aber Zweifel habe das ich dort alles richtig gemacht habe, hier diese Basisarbeit. Soll auch mir die Grundlagen näher bringen.

    Für Profis, die hier mitlesen, ich freue mich über Verbesserungen und ich mache bestimmt auch einiges falsch. Also ran, einfach hier drunter kommentieren.

    Example Class

    Die Klasse beinhaltet die folgenden Funktionen.

    • Add

    • Update

    • Delete

    • Save JSON

    • Load JSON

    • Keys & Last Key

         import json
         
         
         class BackupList():
             """ Class for managing my backup data. Here only as a sample.
                 Functions Add, Update, Delete, Save JSON, Load JSON and Keys, Last Key implemented.
             """
         
             def __init__(self, name, repository):
                 # instantiate an empty dict
                 self.name = name
                 self.repository = repository
         
             @staticmethod
             def add(name, repository):
                 # Add an object
                 print("ADD", name, repository)
                 backups[(BackupList.last_key()) + 1] = BackupList(name, repository)
         
             @staticmethod
             def update(counter, name, repository):
             # Update an object
                 try:
                     backups[counter].name = name
                     backups[counter].repository = repository
                     backups.update()
                 except IOError:
                     print("Error")
         
             @staticmethod
             def delete(number):
                 # Delete an object
                 backups.pop(number)
         
             @staticmethod
             def keys():
                 # Create keys list
                 keys_list = []
         
                 # redo keys_list
                 for key in backups:
                     keys_list.append(key)
         
                 print("Keys:", keys_list)
         
             @staticmethod
             def save_json():
                 # Save my class as JSON
                 backups_json = {}
                 for count, value in enumerate(backups):
                     print("Save", backups[value].name)
                     backups_json[value] = {'name': backups[value].name, 'repository': backups[value].repository}
         
                 # save backups to JSON
                 with open('mydata.json', 'w') as f:
                     json.dump(backups_json, f)
         
             @staticmethod
             def load_json():
                 # load JSON
                 with (open('mydata.json', 'r')) as f:
                     backups_reload = json.load(f)
         
                 # Create objects for my class
                 for count, value in enumerate(backups_reload.values()):
                     print("Reload", value['name'], "Counter:", count)
                     backups[count] = BackupList(value['name'], value['repository'])
         
             @staticmethod
             def last_key():
                 # Create last key
                 last_key = list(dict.keys(backups))[-1]
                 return last_key
         
         
         # create an empty dict
         backups = {}
         
         # Load data from filesystem
         BackupList.load_json()
         
         
         def main():
             # Add an entry
             #BackupList.add('Test02', '/home/frankm/repo2')
             #BackupList.add('Test03', '/home/frankm/repo3')
             #BackupList.add('Test04', '/home/frankm/repo4')
         
             # Print some data
             #print(backups[0].name)
             #print(backups[1].name)
         
             # Del an entry
             #BackupList.delete(1)
         
             print ('-------------')
         
             # Print keys
             BackupList.keys()
         
             print ('-------------')
         
             # Save data as JSON file
             BackupList.save_json()
         
             print ('-------------')
         
             # Uncomment to update entry backups[4]
             #BackupList.update(4, "TESTING6", "REPO")
             # After update we must save the data
             #BackupList.save_json()
         
             print ('-------------')
         
             # Print data from backups
             for count, value in enumerate(backups):
                 print("Control", count, backups[value].name)
         
         
         
         if __name__ == "__main__":
             main()
      

    Ich hoffe es hilft dem ein oder anderen Einsteiger in das Thema JSON und Daten dauerhaft speichern.

    Den Beispielcode findet ihr -> https://gitlab.com/-/snippets/2438459

  • Referenziert von  FrankM FrankM 

  • Aufgrund diverser Code Stellen in meinen beiden Projekten, die etwas wirr aussahen, habe ich ja obige Grundlagenarbeit gemacht gehabt.

    Am Wochenende habe ich dann das Erlernte in die Tat umgesetzt und mein PyWebIO Projekt vollständig umgebaut. Dabei konnte ich viel Code eliminieren und es wesentlich übersichtlicher gestalten.

    Dabei lernt man dann auch immer wieder eine Menge dazu und so entstand meine erste Funktion mit **kwargs 🙂

    @staticmethod
        def update(counter, **kwargs):
    

    Wer was im Code wühlen möchte, findet das Repo zu meinem Restic UI auf Basis von PyWebIO hier.

    Da die Funktionen jetzt alle drin sind und hoffentlich auch alle funktionieren, mach ich mal die Tage wieder ein Video. Dabei finde ich immer die meisten Fehler 😁