0

我第一次玩 Python,手头上有一个小项目,我正在玩弄它来掌握这种语言。我基本上很想知道我是否在想出一个好的解决方案,或者是否有更好的方法去做。

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

  1. 使用 readline() 将每一行读入一个变量
  2. 通过指定逗号作为分隔符来拆分变量
  3. 一旦变量被拆分,我访问这个大小为 3 的数组的每个元素并进行测试以检查它是整数还是其他数据类型

这是非常直接的,从技术上讲,“完成工作”。但是,在我阅读了一些建议使用 pickle 模块来读取由整数组成的文件的 Python 文档后,我的想法发生了冲突。

Python 文档的链接

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

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

4

3 回答 3

7

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

此外,Python 支持任意长度的整数,因此无需担心它们是字符串;一旦他们被转换,你会得到每一个数字。

>>> int('1234567890123456789012345678901234567890')
1234567890123456789012345678901234567890L
于 2012-08-12T05:48:21.343 回答
4

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

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

pickle在大多数情况下,旨在将 Python 对象转储到文件中并再次读取它们。

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

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

于 2012-08-12T05:55:42.090 回答
1

这完全取决于您的整数文件来自哪里,以及您是否希望从其他来源创建/编辑它。

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

于 2012-08-12T05:53:47.323 回答