2013-04-30 164 views
1

我已经创建了一个python脚本,可以自动将PDF转换为txt文件的工作流程。我希望能够在MongoDB中存储和查询这些文件。我是否需要将.txt文件转换为JSON/BSON?我应该使用像PyMongo这样的程序吗?从txt文件存储全文到mongodb

我只是不确定这样的项目的步骤将不会让工具,这将有助于这一点。

我看了这篇文章:How can one add text files in Mongodb?,这让我觉得我需要将文件转换为JSON文件,并可能集成GridFS?

+0

如果它们是小文件,则不需要GridFS。如果它们很大(> 10MB),那么您希望更有可能使用GridFS。 – WiredPrairie 2013-04-30 20:35:10

回答

0

是的,您必须将您的文件转换为JSON。有一个微不足道的方法来做到这一点:使用像{"text": "your text"}这样的东西。以后很容易扩展/更新这些记录。

当然,你需要在文本中跳出"的出现。我想你使用你最喜欢的语言的JSON库和/或MongoDB库来完成所有的格式化。

+0

关于如何转换为JSON的任何建议?我看过帖子提到明胶,但我不确定这是否是最好的工具。 – user2337225 2013-04-30 20:36:15

+0

您不应该将文本文件转换为json。 – WiredPrairie 2013-04-30 20:36:34

+0

是的,它看起来像我可以使用GridFS将整个文本文件作为单个字段存储到MongoDb中? – user2337225 2013-04-30 20:44:44

3

如果您使用驱动程序,则不需要JSON/BSON编码。如果你使用的是MongoDB shell,当你粘贴内容时你需要担心它。

你很可能希望使用Python MongoDB driver

from pymongo import MongoClient 

client = MongoClient() 
db = client.test_database # use a database called "test_database" 
collection = db.files # and inside that DB, a collection called "files" 

f = open('test_file_name.txt') # open a file 
text = f.read() # read the entire contents, should be UTF-8 text 

# build a document to be inserted 
text_file_doc = {"file_name": "test_file_name.txt", "contents" : text } 
# insert the contents into the "file" collection 
collection.insert(text_file_doc) 

(未测试的代码)

如果您确信该文件名是唯一的,你可以设置的的_id财产文件并检索它:

text_file_doc = collection.find_one({"_id": "test_file_name.txt"}) 

或者,您可以确保file_name财产如上所示是索引和做:

text_file_doc = collection.find_one({"file_name": "test_file_name.txt"}) 

您的其他选项是使用GridFS,虽然它通常不建议用于小文件。

Python和GridFS有一个启动器here