pickle ファイルからデータをインポートするアプリケーションがあります。Windows では問題なく動作しますが、Mac と Linux の動作は奇妙です。
OS X では、ファイル タイプを *.* に設定しない限り、pickled ファイル (ファイル拡張子 ".char") を選択できません。次に、拡張子が .char のファイルを選択すると、読み込まれず、エラーが発生します
unpickle_file = cPickle.load(char_file)
ValueError: 文字列を float に変換できませんでした
ただし、.char 拡張子を持たないファイルを作成すると、そのファイルは正常に読み込まれます。
Linux では、「ファイルを開く」ダイアログを使用すると、ファイル拡張子があるかどうかに関係なく、ピクルス化されたファイルが表示されません。ただし、Nautilus や Dolphin の下ではそれらを見ることができます。ただし、それらは単に私のアプリケーションには存在しません。
編集保存コードは次のとおりです。
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()
オープンコードは次のとおりです。
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()