是否使用python pickle?

时间:2012-08-12 05:46:39

标签: python file-io pickle

我第一次玩Python,并且手上有一个迷你项目,我正在努力掌握这种语言。我基本上有兴趣知道我是否想要一个好的解决方案,或者是否有更好的方法去做。

有一个CSV文件基本上列出了整数(或应该列出整数),每行大约有三个整数,用逗号分隔。我这样做的方法是:

  1. 使用readline()
  2. 将每行读入变量
  3. 通过将逗号指定为分隔符
  4. 来拆分变量
  5. 一旦变量被拆分,我访问这个3号数组的每个元素并做一个测试,检查它是一个整数还是一些其他数据类型
  6. 这是非常直接的,从技术上来说,“做到了”。但是,在我阅读了一些建议使用pickle模块来读取由整数组成的文件的Python文档后,我的思绪发生了冲突。

    links to the Python documentatio

    显然,如果正在读取readline,则每行都以字符串形式读入。这意味着,整数也被作为字符串读入,这里可能会有精度损失? Pickle是一个神奇的模块,可以将所有内容转换为字符串表示形式,然后可以将其转换回原始数据类型表示而不会丢失精度。

    恕我直言,我的程序代码在没有使用pickle模块的情况下工作正常,但是为了编写好的代码,你们有什么建议以及你背后的理由是什么:

3 个答案:

答案 0 :(得分:7)

pickle期望文件采用特定格式,由pickle模块本身生成。要读取CSV文件,您应该使用csv模块。

此外,Python支持任意长度的整数,因此不必担心它们是字符串;一旦它们被转换,你将获得最后的数字。

>>> int('1234567890123456789012345678901234567890')
1234567890123456789012345678901234567890L

答案 1 :(得分:3)

如果您阅读pickle module的文档,第一段很好地总结了模块的用途:

  

pickle模块实现了一个基本但强大的算法,用于序列化和反序列化Python对象结构。

在大多数情况下,

pickle旨在将Python对象转储到文件中并再次读回。

至于精度,CSV和Python pickle文件都将数据存储为字符串,因此不会损失精度。

就个人而言,我不会使用泡菜。它可以防止您的简单数据被其他程序读取并使用图形编辑器进行编辑。如果您有复杂的词典和其他Python对象需要担心,pickle将是一个很好的存储方法。然而,在这种情况下,它太过分了。

答案 2 :(得分:1)

这一切都取决于整数文件的来源,以及是否需要从其他来源创建/编辑。

Pickle可以存储/检索python结构,但它不适合交换来自其他系统甚至python版本的数据。