2017-10-12 50 views
1

因此,我一直在研究這個用於大學作業的小程序,但是我需要醃製數據,但是,當我嘗試加載以前的數據並且修改它,程序不會修改已經存在的數據,而是忽略它,這裏是代碼。Python程序不會識別醃製數據,覆蓋現有文件

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」函數中的某處,因爲它會將醃製文件加載到程序中,但是我不能完全弄清楚我做錯了什麼,這是第一次我曾與酸洗工作,所以我不知道我在做什麼。 請幫忙。

回答

0

main中,您不聲明diccCarros爲全局第一,因此該賦值聲明一個新變量而不是寫入您現有的全局變量。