Tengo problemas para cambiar un valor de dict y guardar el dict en un archivo de texto (el formato debe ser el mismo), solo quiero cambiar el member_phone
campo.
Mi archivo de texto tiene el siguiente formato:
memberID:member_name:member_email:member_phone
y dividí el archivo de texto con:
mdict={}
for line in file:
x=line.split(':')
a=x[0]
b=x[1]
c=x[2]
d=x[3]
e=b+':'+c+':'+d
mdict[a]=e
Cuando trato de cambiar el member_phone
almacenado en d
, el valor ha cambiado no fluye por la clave,
def change(mdict,b,c,d,e):
a=input('ID')
if a in mdict:
d= str(input('phone'))
mdict[a]=b+':'+c+':'+d
else:
print('not')
y cómo guardar el dict en un archivo de texto con el mismo formato?
fuente
save_obj
parece requerir que el archivoobj/'+ name + '.pkl
ya exista. Creé un diccionario llamadoQ
, lo poblé e hice la llamadasave_obj(Q, "Qtable")
Recibí un error:FileNotFoundError: [Errno 2] No such file or directory: 'obj/Qtable.pkl'
¿Cómo se crea el archivo en primer lugar antes de escribir en él?wb+
para crear el archivo, es decir:with open('obj/'+ name + '.pkl', 'wb+')
+
a al modo no tendrá ningún efecto en su problema (andrey.s es incorrecto). Su problema parece que se debe a una o dos cosas. Parasave_obj()
que funcione en esta respuesta, ya"obj"
debe existir un subdirectorio llamado porqueopen()
no creará uno automáticamente. En segundo lugar, el primer argumentosave_obj()
es el objeto Python que se va a guardar, no el nombre del subdirectorio (aunque no está del todo claro qué quería decir conQ
en lasave_obj(Q, "Qtable")
llamada de ejemplo ). Puede crear un directorio si aún no existeos.mkdir()
.Pickle es probablemente la mejor opción, pero en caso de que alguien se pregunte cómo guardar y cargar un diccionario en un archivo usando NumPy:
FYI: visor de archivos NPY
fuente
type(read_dictionary)
revelación) y .item () básicamente convierte ese elemento en un objeto escalar python que es un diccionario como se indica aquíTambién podemos usar el
json
módulo en el caso de que los diccionarios u otros datos se puedan asignar fácilmente al formato JSON .Esta solución aporta muchos beneficios , por ejemplo, las obras de Python 2.x y 3.x Python en forma inalterada y, además, los datos guardados en JSON formato puede ser transferido fácilmente entre muchas plataformas o programas diferentes . Estos datos también son legibles por humanos .
fuente
open
directamente en lugar de un contexto creado porwith
. ¿Hay una garantía, el identificador de archivo se cerrará sijson.dump
falla?No estoy seguro de cuál es su primera pregunta, pero si desea guardar un diccionario en un archivo, debe usar la
json
biblioteca. Busque la documentación de las cargas y pone funciones.fuente
Guardar y cargar dict al archivo:
fuente
Para un diccionario de cadenas como el que está tratando, podría hacerse utilizando solo las capacidades de procesamiento de texto incorporadas de Python.
(Tenga en cuenta que esto no funcionaría si los valores son otra cosa).
fuente
split()
método) -que es el tema de esta pregunta. Parece que estás tratando de usarlo en un diccionario de diccionarios, así que no, no funcionaría con ellos. Tampoco aprecio los votos negativos de la gente porque realmente no entienden la pregunta (y, por lo tanto, el contexto de las respuestas proporcionadas). Actualizaré mi respuesta cuando sea apropiado usarla, así que deshaga su voto negativo.Sugeriría guardar sus datos usando el formato JSON en lugar del formato pickle ya que los archivos JSON son legibles por humanos, lo que facilita su depuración ya que sus datos son pequeños. Los archivos JSON también son utilizados por otros programas para leer y escribir datos. Puedes leer más sobre esto aquí
Deberá instalar el módulo JSON, puede hacerlo con pip:
Esto crea un archivo json con el nombre myfile.
Esto lee y almacena los datos myfile.json en un objeto de datos.
fuente
A menos que realmente desee conservar el diccionario, creo que la mejor solución es utilizar el
csv
módulo Python para leer el archivo. Luego, obtienes filas de datos y puedes cambiarmember_phone
o lo que quieras; finalmente, puede usar elcsv
módulo nuevamente para guardar el archivo en el mismo formato en que lo abrió.Código para leer:
Código para escribir:
Por supuesto, debe adaptar su
change()
función:fuente
Of course, you need to adapt your change() function:
dict
se utilizó a mientras que csv funciona más como una listaNo lo he cronometrado, pero apuesto a que h5 es más rápido que el encurtido; el tamaño del archivo con compresión es casi seguro más pequeño.
fuente
Solución rápida y sucia: convierta el dict a cadena y guárdelo en un archivo, por ejemplo:
fuente