Maison  >  Article  >  développement back-end  >  Introduction à l'utilisation de json et pickle

Introduction à l'utilisation de json et pickle

PHP中文网
PHP中文网original
2017-06-21 16:48:501174parcourir

json

json est l'un des modules qui effectuent la sérialisation et la désérialisation des types de données de programme. Il peut être utilisé pour échanger des données sous différentes plates-formes et différents programmes ou comme méthode permettant aux programmes de sauvegarder temporairement des données. Jetons un coup d'œil à l'utilisation de json :

 1 #json_序列化.py 2 import json 3 dic={ 4     "id":"123456", 5     "name":"Jack", 6     "country":"China" 7     } 8 date=json.dumps(dic) 9 with open("demo.txt","w") as f:10     f.write(date)11 12 #json_反序列化.py13 import json14 with open("demo.txt","r") as f:15     dic1=json.loads(f.read())16 print(dic1["name"])

Ce qui précède montre le contenu des deux fichiers. Le premier fichier est un dictionnaire. séquence Convertissez-le en chaîne (en utilisant la méthode dumps()) et écrivez-le dans un fichier (demo.txt). Le deuxième fichier consiste à lire le contenu de demo.txt, puis à utiliser la méthodeloads() pour le désérialiser en un objet dictionnaire exécutable et à imprimer le contenu du "nom" du dictionnaire.

En fait, en plus de dumps() etloads(), json a deux méthodes plus simples : dump() et load(). L'utilisation est démontrée ci-dessous :

 1 #json_序列化2.py 2 import json 3 dic={ 4     "id":"123456", 5     "name":"Jack", 6     "country":"China" 7     } 8 with open("demo.txt","w") as f: 9     date=json.dump(dic,f)10 11     12 13 #json_反序列化2.py14 import json15 with open("demo.txt","r") as f:16     dic1=json.load(f)17 print(dic1["name"])

Une comparaison montre que dump() et Load() encapsulent dumps(), Loads() et les opérations de lecture et d'écriture de fichiers.

pickle

pickle a également les quatre méthodes json ci-dessus, et l'utilisation c'est exactement la même chose, je ne le démontrerai pas ici. Mais le cornichon est plus puissant. json ne peut sérialiser que certains objets de données relativement simples, tels que des listes, des dictionnaires, etc. Pickle peut également sérialiser des objets complexes tels que des fonctions et des classes.

Ce qui suit montre comment pickle sérialise et désérialise une fonction.

 1 #pickle_序列化.py 2 import pickle 3 #定义函数hello 4 def hello(name): 5     print("hello",name) 6 #定义列表,把hello也存进去 7 dic1={ 8     "name":"Mark", 9     "func":hello10     }11 with open("demo.txt","wb") as f:12     pickle.dump(dic1,f)13 14 #pickle_反序列化.py15 import pickle16 #######################17 def hello(name):18     print("hello",name)19 #######################20 with open("demo.txt","rb")as f:21     dic2=pickle.load(f)22 dic2["func"]("Jack")

Ce qui précède montre également le contenu des deux fichiers. Faites attention aux problèmes suivants :

1. Lorsqu'il s'agit de sérialisation et de désérialisation de fonctions, de classes, etc., lors de l'ouverture du fichier, il doit être ouvert sous forme binaire. à l'écran. ", "rb"

2. Si vous souhaitez que la fonction désérialisée soit exécutée dans un nouveau fichier, vous devez copier le code source de la fonction précédemment définie dans le nouveau fichier (notez pickle_ Deserialize le contenu dans les deux lignes de # lignes dans .py), sinon il ne s'exécutera pas. S'il n'y a pas de contenu dans le numéro #, le programme signalera une erreur : AttributeError : Impossible d'obtenir l'attribut 'hello' sur < module '__main__' de 'D:/Users/LENOVO/PycharmProjects/Myfirstflask/about_json.py'>

3 Vous pouvez modifier le code source de la fonction copiée. Il vous suffit de vous assurer que la fonction. Le nom est le même que celui utilisé pour la sérialisation. Le nom de la fonction doit être le même. Si la fonction est appelée après le changement, elle sera exécutée selon la fonction modifiée (bien sûr, ce changement doit être nécessaire).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn