【发布时间】: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'
-
添加示例代码