繁体   English   中英

是否使用python pickle?

[英]To use python pickle or not?

我是第一次玩Python,并且手头上有一个微型项目,我正在玩这个项目以了解这种语言。 我基本上很想知道我是否正在想出一个好的解决方案,或者是否有更好的方法来做到这一点。

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

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

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

链接到Python文档

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

恕我直言,我的程序代码无需使用pickle模块就可以正常工作,但是为了编写出良好的代码,你们有何建议,其背后的原理是什么:

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

另外,Python支持任意长度的整数,因此无需担心它们是字符串。 转换后,您将获得最后一位数字。

>>> int('1234567890123456789012345678901234567890')
1234567890123456789012345678901234567890L

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

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

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

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

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

这完全取决于整数文件的来源以及是否要从其他来源创建/编辑整数文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM