objeto guardar ejemplos dumps datacamp cpickle archivo python dictionary save pickle

guardar - Guarde un diccionario en un archivo(alternativa a pickle) en Python?



python pickle ejemplos (6)

Respondí terminé yendo con pickle al final de todos modos

Ok, entonces, con algunos consejos sobre otra pregunta, pregunté si me dijeron que usara pickle para guardar un diccionario en un archivo.

El diccionario que estaba intentando guardar en el archivo era

members = {''Starspy'' : ''SHSN4N'', ''Test'' : ''Test1''}

Cuando Pickle lo guardó en el archivo ... este era el formato

(dp0 S''Test'' p1 S''Test1'' p2 sS''Test2'' p3 S''Test2'' p4 sS''Starspy'' p5 S''SHSN4N'' p6 s.

¿Puedes darme una forma alternativa de guardar la cadena en el archivo?

Este es el formato que me gustaría guardar en

members = {''Starspy'': ''SHSN4N'', ''Test'': ''Test1''}

Código completo:

import sys import shutil import os import pickle tmp = os.path.isfile("members-tmp.pkl") if tmp == True: os.remove("members-tmp.pkl") shutil.copyfile("members.pkl", "members-tmp.pkl") pkl_file = open(''members-tmp.pkl'', ''rb'') members = pickle.load(pkl_file) pkl_file.close() def show_menu(): os.system("clear") print "/n","*" * 12, "MENU", "*" * 12 print "1. List members" print "2. Add member" print "3. Delete member" print "99. Save" print "0. Abort" print "*" * 28, "/n" return input("Please make a selection: ") def show_members(members): os.system("clear") print "/nNames", " ", "Code" for keys in members.keys(): print keys, " - ", members[keys] def add_member(members): os.system("clear") name = raw_input("Please enter name: ") code = raw_input("Please enter code: ") members[name] = code output = open(''members-tmp.pkl'', ''wb'') pickle.dump(members, output) output.close() return members #with open("foo.txt", "a") as f: # f.write("new line/n") running = 1 while running: selection = show_menu() if selection == 1: show_members(members) print "/n> " ,raw_input("Press enter to continue") elif selection == 2: members == add_member(members) print members print "/n> " ,raw_input("Press enter to continue") elif selection == 99: os.system("clear") shutil.copyfile("members-tmp.pkl", "members.pkl") print "Save Completed" print "/n> " ,raw_input("Press enter to continue") elif selection == 0: os.remove("members-tmp.pkl") sys.exit("Program Aborted") else: os.system("clear") print "That is not a valid option!" print "/n> " ,raw_input("Press enter to continue")


Aunque, a diferencia de pp.pprint(the_dict) , esto no será tan bonito, se ejecutará en conjunto, str() al menos hace que un diccionario sea salvable de una manera sencilla para tareas rápidas:

f.write( str( the_dict ) )


Claro, guárdalo como CSV:

import csv w = csv.writer(open("output.csv", "w")) for key, val in dict.items(): w.writerow([key, val])

Entonces leerlo sería:

import csv dict = {} for key, val in csv.reader(open("input.csv")): dict[key] = val

Otra alternativa sería json ( json para la versión 2.6+, o install simplejson para 2.5 y siguientes):

>>> import json >>> dict = {"hello": "world"} >>> json.dumps(dict) ''{"hello": "world"}''



El formato de serialización más común para esto hoy en día es JSON, que es universalmente compatible y representa estructuras de datos simples como diccionarios muy claramente.

>>> members = {''Starspy'' : ''SHSN4N'', ''Test'' : ''Test1''} >>> json.dumps(members) ''{"Test": "Test1", "Starspy": "SHSN4N"}'' >>> json.loads(json.dumps(members)) {u''Test'': u''Test1'', u''Starspy'': u''SHSN4N''}


Si bien sugiero pickle , si quieres una alternativa, puedes usar klepto .

>>> init = {''y'': 2, ''x'': 1, ''z'': 3} >>> import klepto >>> cache = klepto.archives.file_archive(''memo'', init, serialized=False) >>> cache {''y'': 2, ''x'': 1, ''z'': 3} >>> >>> # dump dictionary to the file ''memo.py'' >>> cache.dump() >>> >>> # import from ''memo.py'' >>> from memo import memo >>> print memo {''y'': 2, ''x'': 1, ''z'': 3}

Con klepto , si hubiera utilizado serialized=True , el diccionario se habría escrito en memo.pkl como un diccionario escabechado en lugar de con texto claro.

Puede obtener klepto aquí: https://github.com/uqfoundation/klepto

dill es probablemente una mejor opción para conservar en vinagre luego pickle , ya que el dill puede serializar casi cualquier cosa en pitón. klepto también puede usar dill .

Puedes obtener dill aquí: https://github.com/uqfoundation/dill


Tu asked

Lo intentaré. ¿Cómo especifico de qué archivo descargarlo / cargarlo?

Además de escribir en una cadena, el módulo json proporciona un método dump() -method, que escribe en un archivo:

>>> a = {''hello'': ''world''} >>> import json >>> json.dump(a, file(''filename.txt'', ''w'')) >>> b = json.load(file(''filename.txt'')) >>> b {u''hello'': u''world''}

También hay un método load() para leer.