Tengo una aplicación que importa datos de un archivo en escabeche. Funciona bien en Windows, pero el comportamiento de Mac y Linux es extraño.El archivo en escabeche no se carga en Mac/Linux
En OS X, el archivo conservado (extensión de archivo ".char") no está disponible como una selección a menos que establezca el tipo de archivo en *. *. Entonces, si selecciono un archivo que tiene la extensión .char, no va a cargar, dando el error
unpickle_file = cPickle.load(char_file)
ValueError: could not convert string to float
Sin embargo, si se crea un archivo que no tiene la extensión .char, ese archivo Cargar bien.
En Linux, cuando utilizo el cuadro de diálogo "abrir archivo", mis archivos conservados no son visibles, tengan o no una extensión de archivo. Sin embargo, puedo verlos bajo Nautilus o Dolphin. Sin embargo, simplemente no existen para mi aplicación.
Editar Aquí está el código ahorrar:
def createSaveFile(self):
"""Create the data files to be saved and save them.
Creates a tuple comprised of a dictionary of general character information
and the character's skills dictionary."""
if self.file_name:
self.save_data = ({'Name':self.charAttribs.name,
<snip>
self.charAttribs.char_skills_dict)
self.file = open(self.file_name, 'w')
cPickle.dump(self.save_data, self.file)
self.file.close()
Aquí está el código abierto:
def getCharFile(self, event): # wxGlade: CharSheet.<event_handler>
"""Retrieve pickled character file from disk."""
wildcard = "Character files (*.char) | *.char | All files (*.*) | *.*"
openDialog = wx.FileDialog(None, "Choose a character file", os.getcwd(),
"", wildcard, wx.OPEN | wx.CHANGE_DIR)
if openDialog.ShowModal() == wx.ID_OK:
self.path = openDialog.GetPath()
try:
char_file = open(self.path, "r")
unpickle_file = cPickle.load(char_file)
char_data, char_skills = unpickle_file
self.displayCharacter(char_data, char_skills)
except IOError:
self.importError = wx.MessageDialog(self,
"The character file is not available!",
"Character Import Error", wx.OK | wx.ICON_ERROR)
self.importError.ShowModal()
self.importError.Destroy()
openDialog.Destroy()
¿Qué es un "archivo en escabeche"? –
Un archivo que se ha creado utilizando el módulo pickle (http://docs.python.org/library/pickle.html#module-pickle), un módulo utilizado para serializar y deserializar estructuras de datos. –