我在python中使用神圣包,这可以跟踪我正在运行的计算实验。 sacred允许添加观察者(mongodb
),其存储有关实验的各种信息(configuration
,source files
等)。
sacred
允许使用sacred.Experiment.add_artifact(PATH_TO_FILE).
此命令实际上将文件添加到数据库。
我正在使用MongoDB指南针,我可以访问实验信息并看到已添加工件。它包含两个字段:
“name
”和“file_id
”包含ObjectId
。 (见图)
我试图访问存储的文件本身。我注意到在我的数据库中有一个名为sub-db
的额外fs.files
我可以过滤以找到我的ObjectId
但它似乎不允许我访问该文件的内容本身。
答案 0 :(得分:1)
MongoDB文件存储由" GridFS"处理。它基本上将文件分成块并将它们存储在一个集合中(fs.files)。
访问教程:http://api.mongodb.com/python/current/examples/gridfs.html
答案 1 :(得分:1)
GridFS
(import gridfs, pymongo
)
如果您已经拥有ObjectId
:
artifact = gridfs.GridFS(pymongo.MongoClient().sacred)).get(objectid)
要查找名为ObjectId
的工件的filename
result
作为db.runs.find
的一个条目:
objectid = next(a['file_id'] for a in result['artifacts'] if a['name'] == filename)
答案 2 :(得分:0)
我编写了一个名为asNull
的小型库,以访问通过神圣存储的MongoDB中的数据。可在GitHub https://github.com/JarnoRFB/incense上通过pip获得。有了它,您可以将实验加载为Python对象。这些工件将作为对象提供,您可以再次将它们保存在磁盘上或在Jupyter笔记本中显示
Json