Heim  >  Artikel  >  Backend-Entwicklung  >  Python implementiert Objekte, die JSON-Speicherung und -Analyse unterstützen

Python implementiert Objekte, die JSON-Speicherung und -Analyse unterstützen

高洛峰
高洛峰Original
2017-03-23 16:08:101307Durchsuche

Wir wissen, dass das JSON-Modul zum bequemen dauerhaften Speichern von Python-Grundtypdaten (Dikt, Liste usw.) in Dateien verwendet werden kann und dass es auch durch benutzerdefinierte Konvertierungsfunktionen konvertiert werden kann und Erben Sie die Methode JSON encode&decode, um die Speicherung benutzerdefinierter Klassen zu implementieren. Dieser Artikel basiert auf dem vorherigen „Python JSON-Modul“, um das Objekt von Python zu implementieren, das JSON-Speicher unterstützt.

Es ist sehr sinnvoll, dass Objekte JSON speichern und analysieren können. Beispielsweise fallen beim Training aller Klassifizierungsalgorithmen beim maschinellen Lernen große Datenmengen an. Wenn der Klassifizierungsalgorithmus bei jedem Start der Klassifizierung neu trainiert werden muss, ist dies eine Verschwendung von Ressourcen und eine ineffiziente Klassifizierung Das durch das Training generierte Algorithmusobjekt kann gespeichert werden. Sofern es nicht benötigt wird, muss die Algorithmusoptimierung nur später geladen werden. Andererseits ermöglicht die Fähigkeit von Objekten, JSON zu analysieren und zu speichern, auch deren Übertragung über das Netzwerk, was im aktuellen Cloud Computing und der verteilten Datenverarbeitung von großer Bedeutung ist.

Um Self-Storage und Parsing zu realisieren, sind die wichtigsten Vorgänge beim Definieren eines Objekts:

0, Objekt_json.py kopieren zum Paket. Das Modul, das das Objekt definiert, importiert object_json: import object_json.

1. Die Funktion init() muss eine variable Anzahl von Funktionsaufrufen unterstützen, d. h. sie muss als init(self, …, , **args) geschrieben werden. Nur wenn das Objekt auf diese Weise definiert wird, kann es andere Eigenschaften als die

Eigenschaften haben, die während der Konstruktionsphase initialisiert werden müssen.

2. Für Attribute, die während der Objektkonstruktionsphase initialisiert werden müssen, müssen die formalen Parameter in der Funktion init() genau mit den Namen dieser Attribute übereinstimmen, damit sie über das Wörterbuch erstellt werden können '

key': Wertepaarobjekt.

3. Definieren Sie ein Attribut „Name“ – den Namen der Objektinstanz, implementiert mit dem Inspect-Modul. Das Attribut „Name“ wird hauptsächlich zum Generieren des Standarddateinamens beim Speichern von Objekten verwendet.

4, definieren Sie die Methoden jsonDumps() und js

onLoadTransfer(), schließen Sie das Laden der Objekt-JSON-Datei und die Erstellung neuer Objekte über objectLoadFromFile() ab.

(i) jsonDumps() wird zum Konvertieren von Objekten in Diktate und zum Speichern von Objekten in JSON-Dateien über json.dumps() verwendet. Wenn der Benutzer keinen Dateinamen angibt, ist Instanzname.json der Standardspeicher Datei. Da JSON nur Python-Basistypen unterstützt, müssen andere Typen im Objekt (z. B. Numpy-Matrix) in Python-Basistypen konvertiert werden (z. B. Matrix.tolist (), um eine Matrix in eine Liste umzuwandeln).

(ii) jsonLoadTransfer() wird verwendet, um die Konvertierung des Datenformats abzuschließen und einige Objektattribute von Basistypen in erforderliche Typen zu konvertieren (z. B. mat(list), um den Typ von Liste in Matrix If zu konvertieren). Bei Objekten können nur Python-Basistypen diese Methode weglassen. Der Prozess zum Erstellen eines vollständigen und verwendbaren Objekts ist:

obj = objectLoadFromFile()   
obj.jsonLoadTransfer()
Der folgende Code ist der Quellcode des object_json-Moduls, das benutzerdefinierte Objekte für die JSON-Speicherung und -Analyse unterstützt.

import json   
import inspect    
import pdb   
def object2dict(obj):      
    #convert object to a dict      
    d = {'class':obj.class.name, 'module':obj.module}      
    d.update(obj.dict)      
    return d   
def objectDumps2File(obj, jsonfile):   
    objDict = object2dict(obj)   
    with open(jsonfile, 'w') as f:   
        f.write(json.dumps(objDict))   

def dict2object(d):      
    '''convert dict to object, the dict will be changed'''       
    if'class' in d:      
        class_name = d.pop('class')      
        module_name = d.pop('module')      
        module = import(module_name)      
        #print 'the module is:', module      
        class_ = getattr(module,class_name)      
        args = dict((key.encode('ascii'), value) for key, value in d.items()) #get args     
        #print 'the atrribute:', repr(args)   
        #pdb.set_trace()   
        inst = class_(**args) #create new instance      
    else:      
        inst = d      
    return inst   
def objectLoadFromFile(jsonFile):   
    '''load json file and generate a new object instance whose name filed  
    will be 'inst' '''  
    with open(jsonFile) as f:   
        objectDict =json.load(f)   
    obj = dict2object(objectDict)   
    return obj   
#test function      
if name  == 'main':   
    class Person(object):      
        def init(self,name,age, **args):   
            obj_list = inspect.stack()[1][-2]   
            self.name = obj_list[0].split('=')[0].strip()#object instance name   
            self.name = name      
            self.age = age   

        def repr(self):      
            return 'Person Object name : %s , age : %d' % (self.name,self.age)   
        def say(self):   
            #d = inspect.stack()[1][-2]   
            #print d[0].split('.')[0].strip()   
            return self.name  
        def jsonDumps(self, filename=None):   
            '''essential transformation to Python basic type in order to  
            store as json. dumps as objectname.json if filename missed '''  
            if not filename:   
                jsonfile = self.name+'.json'   
            else: jsonfile = filename   
            objectDumps2File(self, jsonfile)   

        def jsonLoadTransfer(self):#TBD   
            '''essential transformation to object required type,such as  
            numpy matrix.call this function after newobject = objectLoadFromFile(jsonfile)'''  
            pass  

    p = Person('Aidan',22)        
    #json.dumps(p)#error will be throwed   

    #objectDumps2File(p,'Person.json')   
    p.jsonDumps()   
    p_l = objectLoadFromFile('p.json')   

    print 'the decoded obj type: %s, obj:%s' % (type(p_l),repr(p_l))
Es gibt zwei Arten von Python-Klassen: alt und neu. Der Zweck des Erbens von Objekten nach py 2.2 besteht darin, diese Klasse zu einer neuen Stilklasse zu machen. Diejenigen, die kein Objekt erben, sind traditionelle klassische Klassen. welches schließlich das Objekt erben wird).

Es gibt zwei Methoden in der Klassendefinition:

class Person():   
class Person(object)
Der Unterschied ist:

Wenn ein neuer Personeninstanztest erstellt wird, wird die Ausgabe vom Typ (Test) ist jeweils:

<type &#39;instance&#39;>   
<class &#39;main.Person&#39;>
Das Inspektionsmodul bietet eine Reihe von Introspektionsfunktionen, mit denen Informationen über Module, Klassen, Methoden, Funktionen, Tracebacks, Frame-Objekte und Codeobjekte abgerufen werden können. Häufig verwendete Methoden sind getmembers, ismodule, getcallargs, isclass usw.

Das obige ist der detaillierte Inhalt vonPython implementiert Objekte, die JSON-Speicherung und -Analyse unterstützen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn