【问题标题】:Python 2.7 -> Python 3 pickling [duplicate]Python 2.7 -> Python 3 酸洗 [重复]
【发布时间】:2018-01-06 12:19:54
【问题描述】:

我一直在使用 python 2.7 从网上抓取数据并将数据存储在 MongoDB 中。有些数据需要序列化(熊猫数据帧),所以我一直在 python 2.7 中腌制文件。

我现在已经在 python 3 中编写了一些新脚本,但我在解压数据时遇到了兼容性问题(如其他帖子 Unpickling a python 2 object with python 3 中所述)。由于数据直接来自 Mongo,因此这些解决方案不起作用,因为它们专注于从 HD 读取文件的方法。

下面是一些示例代码:

在 2.7 中存储数据

pickled_data = pickle.dumps(scraped_data)
local_city.update({'location_name':'Boston'}, {"$set": {"Weather": pickled_data}})

(尝试)在 python 3 中解封数据

db_cursor = local_city.find_one({"location_name": 'Boston'})
unpickled_data = pickle.loads(db_cursor["Weather"], fix_imports=True)

我尝试使用:

unpickled_data = pickle.loads(db_cursor["Weather"], fix_imports=True)

错误信息

TypeError: 需要一个类似字节的对象,而不是 'str'

unpickled_data = pickle.loads(db_cursor["Weather"], fix_imports=True, encoding='bytes'))

错误信息

TypeError: file must have 'read' 和 'readline' 属性

unpickled_data = pickle.loads(db_cursor["Weather"], fix_imports=True, encoding='latin1'))

错误信息

TypeError: file must have 'read' 和 'readline' 属性

所以我想知道是否有一种方法可以在 2.7 中进行腌制(并将文件存储在 Mongo 中),并且可以在 Python 3 中轻松取消腌制。

谢谢

【问题讨论】:

  • 提示您如何处理泡菜以及您所面临的具体问题不会受到伤害。换句话说,minimal reproducible example.
  • # 在 2.7 中存储数据 pickled_data = pickle.dumps(scraped_data) local_city.update({'location_name':'Boston'}, {"$set": {"Weather": pickled_data}}) # (尝试)在 python 3 中解压数据 db_cursor = local_city.find_one({"location_name": 'Boston'}) unpickled_data = pickle.loads(db_cursor["Weather"], fix_imports=True) # Error msg TypeError: a bytes -like 对象是必需的,而不是 'str'
  • 添加示例代码

标签: python mongodb pickle


【解决方案1】:

如果我正确理解了您的问题,您可以使用 python 2.7 将抓取的数据存储在 Mongo 中,然后将数据库数据的记录保存到文本文件中(在写入文本文件时注意数据的结构,使用标准格式)。在使用 python 3 时,您可以使用该 txt 文件来提取数据。

mongoexport --host localhost --db dbname --collection collectionname --type=csv --out name.txt --fields name,id,etc(不带空格并用逗号分隔)

此代码会将文件保存为 txt 文件(txt 文件能够存储大量内容),使用标准 csv 格式。

【讨论】:

  • 啊,应该更具体。我想在 Python 2.7 中腌制日期
猜你喜欢
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多