当前位置: 首页 > 面试题库 >

腌制的文件不会在Mac / Linux上加载

邢皓
2023-03-14
问题内容

我有一个从腌制文件中导入数据的应用程序。它在Windows中可以正常工作,但Mac和Linux的行为很奇怪。

在OS X中,除非将文件类型设置为,否则腌制的文件(文件扩展名“
.char”)不可用。然后,如果我选择一个扩展名为.char的文件,它将无法加载,并显示错误消息

unpickle_file = cPickle.load(char_file)

ValueError:无法将字符串转换为浮点型

但是,如果我创建的文件没有.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()

问题答案:

写入和/或读取腌制的数据时,可能没有以二进制模式打开文件。在这种情况下,将进行换行格式转换,这可能会破坏二进制数据。

要以二进制模式打开文件,您必须在模式字符串中提供“ b”:

char_file = open('pickle.char', 'rb')


 类似资料:
  • 问题内容: 我有一个defaultdict看起来像这样: 问题是,我不能使用cPickle腌制它。我在这里找到的解决方案之一是使用模块级函数而不是lambda。我的问题是,什么是模块级功能?如何在cPickle中使用字典? 问题答案: 除了Martijn的解释之外: 模块级函数是在模块级定义的函数,这意味着它不是类的实例方法,它不嵌套在另一个函数中,并且它是带有名称的“真实”函数,而不是lambd

  • 我最近在我的Mac上下载了JDK7U25(我运行的是OSX10.7.5)用于我的java developers类。在http://www.Oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html从Oracle下载了.dmg文件并成功安装了软件包之后,我尝试在Library>Java>JavaVirtualMac

  • 问题内容: 让我们看看Linux()中的功能: 让我们看看Mac()中的功能: 如您所见,这些声明彼此不同(参数顺序)。这真是令人惊讶!在某个地方抱怨解决这个问题是否有效? 问题答案: 在某个地方抱怨解决这个问题是否有效? las,不。这种方式已经存在了很长时间,并且有太多的代码依赖于此。 我认为根本的问题是“ 为什么会发生这些不兼容 ”?我会回答。它似乎可以归结为BSD首先实现它,但界面较差。I

  • 我正在mac上学习使用chrome的selenium。 我已经设法用以下代码加载谷歌主页。 基于此,我尝试用selenium加载一个本地html文件。 Chrome以奇怪的字符串启动。 得到了这个错误。 回溯(最近一次调用last):文件“/Users/pan/selenium.py”,第11行,在驱动程序中。get(dir_path“/game/dino.html”)File“/Users/pa

  • 问题内容: 我在Mac上工作,正在尝试指定桌面上文件的路径。 我只是这样做: 当我尝试运行它时,我得到了FileNotFoundException。 如何正确指定路径? 问题答案: Mac OS X的文件系统区分大小写。并应以大写字母开头,并且文件名也应区分大小写。 由于您要查找的是桌面文件夹,而不是名称为的用户的根文件夹,因此需要在该文件夹后添加用户名。例如:

  • 下面链接的文档似乎表明可以对顶级类及其实例进行pickle处理。但根据我对前一个问题的回答来看,这似乎不正确。在我发布的脚本中,pickle接受类对象并写入文件,但这没有用。 这是我的问题:这个文档是错误的,还是有更微妙的东西我不明白?另外,在这种情况下,泡菜是否应该生成某种错误消息? https://docs . python . org/2/library/pickle . html # wh