1

我在 python 中使用神圣包,这允许跟踪我正在运行的计算实验。神圣允许添加观察者(mongodb),它存储有关实验的各种信息(configurationsource files)。 sacred允许使用将工件添加到 db btsacred.Experiment.add_artifact(PATH_TO_FILE).

该命令实质上是将文件添加到数据库中。

我正在使用 MongoDB 指南针,我可以访问实验信息并查看已添加的工件。它包含两个字段: ' name' 和 ' file_id' 其中包含一个ObjectId. (见图)

我正在尝试访问存储的文件本身。我注意到在我的数据库下有一个额外的sub-db调用fs.files,我可以过滤找到我的ObjectId,但它似乎不允许我访问文件本身的内容。

.files 下的对象 ID

工件/对象下的 file_id

4

3 回答 3

1

我编写了一个小型库incense,用于访问通过神圣存储的 MongoDB 中的数据。它可以在 GitHub 上的https://github.com/JarnoRFB/incense和通过 pip 获得。有了它,您可以将实验加载为 Python 对象。工件将作为对象提供,您可以再次将其保存在磁盘上或显示在 Jupyter 笔记本中

from incense import ExperimentLoader

loader = ExperimentLoader(db_name="my_db")
exp = loader.find_by_id(1)
print(exp.artifacts)
exp.artifacts["my_artifact"].save()  # Save artifact on disk.
exp.artifacts["my_artifact"].render()  # Display artifact in notebook.
于 2019-02-15T09:07:55.837 回答
1

MongoDB 文件存储由“GridFS”处理,它基本上将文件分成块并将它们存储在一个集合(fs.files)中。

访问教程: http: //api.mongodb.com/python/current/examples/gridfs.html

于 2017-12-21T11:29:06.930 回答
1

GridFS( import gridfs, pymongo)的代码示例

如果您已经拥有ObjectId

artifact = gridfs.GridFS(pymongo.MongoClient().sacred)).get(objectid)

要查找以的条目ObjectId命名的工件的:filenameresultdb.runs.find

objectid = next(a['file_id'] for a in result['artifacts'] if a['name'] == filename)
于 2018-05-06T14:55:19.630 回答