Python程序无法识别pickle数据,会覆盖现有文件

时间:2017-10-12 05:56:49

标签: python function pickle

所以,我一直在研究这个小程序用于大学作业,我需要挑选数据,但是,当我尝试加载以前的数据并修改它时,程序不会修改数据。已经存在,相反,它忽略了它,这是代码。

import pickle

diccActivos = {}

def guarda(nomArchGuardar,lista):
    try:
        f=open(nomArchGuardar,"wb")
        print("Guardando el archivo"+" "+nomArchGuardar+"...")
        pickle.dump(lista,f)
        print("El archivo",nomArchGuardar,"ha sido guardado con éxito")
        f.close()
    except:
        print("Error al grabar el archivo: ", nomArchGuardar)


def abre (nomArchLeer):
    dicc={}
    try:
        f=open(nomArchLeer,"rb")
        print("Cargando el archivo"+" "+nomArchLeer+"...")
        dicc = pickle.load(f)
        print("El archivo",nomArchLeer,"ha sido cargado con éxito")
        f.close()
    except:
        print("Error al leer el archivo: ", nomArchLeer)
    return dicc

#Definición de Funciones
def agregarActivo(diccActivos):
    ubicacion=input("Ubicación: ")
    descripcion=input("Descripción: ")
    estado=input("Estado: ")
    datosActivo=[descripcion,estado]
    diccActivos[ubicacion]=datosActivo
    guarda("activos",diccActivos)
    return diccActivos

def mostrarActivo(diccActivos,ubicacion):
    infoActivo=diccActivos[ubicacion]
    print("Ubicación: ",ubicacion)
    print("Descripción: ",infoActivo[0])
    print ("Estado: ",infoActivo[1])

def eliminarActivo(diccActivos,ubicacion):
    del(diccActivos[ubicacion])
    #Guarda el diccionario en un archivo
    guarda("activos",diccActivos)

def mostrarTodosActivos(diccActivos):
    claves = list(diccActivos.keys())
    for clave in claves:
        mostrarActivo(diccActivos,clave)
    print ("********************")

def menu():
    diccCarros=abre ("activos")
    while True:
        print("\n--------------------------------\n")
        print("1-Agregar Activo")
        print("2-Mostrar Activo")
        print("3-Eliminar Activo")
        print("4-Mostrar Todos Los Activos")
        print("5-Terminar")
        print("\n--------------------------------\n")
        opcion = int(input("Escoja una opción: "))
        if opcion == 1:
            agregarActivo(diccActivos)
        elif opcion == 2:
            ubicacion=input("Indique el código de ubicación del activo a mostrar: ")
            mostrarActivo(diccActivos,ubicacion)
        elif opcion == 3:
            ubicacion = input("Indique el código de ubicación del activo a eliminar: ")
            eliminarActivo(diccActivos,ubicacion)
        elif opcion == 4:
            mostrarTodosActivos(diccActivos)
        elif opcion == 5:
            #Guarda el diccionario en un archivo
            guarda("activos",diccActivos)
            break
        else:
            print("Opción no existente, inténtelo de nuevo")
            menu()

#Programa Principal
menu()

例如,函数“mostrarActivo”接收索引作为变量,并且应该打印该索引上的所有内容,但是,如果您运行该程序,它将不会打印任何内容,因为它的行为就像没有任何东西一样。

我知道这个问题可能在“abre”函数的某个地方,因为它将pickle文件加载到程序中,但是,我无法弄清楚我做错了什么,这是第一次我一直在做酸洗,所以我不知道我在做什么。 请帮忙。

1 个答案:

答案 0 :(得分:0)

main中,您不首先将diccCarros声明为全局,因此赋值声明了一个新变量,而不是写入现有的全局变量。