1

我目前正在尝试将几个文本文件加载到 MongoDB 中(它们是 JSON 格式)。

我尝试使用 OS walk,但我似乎遇到了麻烦。我目前的方法是:

>>> import pymongo
>>> import os
>>> import json
>>> from pymongo import Connection
>>> connection = Connection()
>>> db = connection.Austin
>>> collection = db.tweets
>>> collection = db.tweet_collection
>>> db.tweet_collection
Collection(Database(Connection('localhost', 27017), u'Austin'), u'tweet_collection')
>>> collection
Collection(Database(Connection('localhost', 27017), u'Austin'), u'tweet_collection')
>>> tweets = db.tweets
>>> tweet = open(os.path.expanduser('~/Tweets/10_7_2012_12:09-Tweets.txt'),'r')
>>> for line in tweet:
...      d = json.loads(line)
...      tweets.insert(d)
... 

用于插入单个推文。我希望能够打开多个文件并运行同一段代码,即自动将 JSON 转换为 python 字典并将其插入集合的 for 循环。

有没有人有一个如何做到这一点的可靠例子,并附有解释?

当我们讨论这个话题时,我试图在对数据库了解不多的情况下使用 MongoDB(我知道这很愚蠢),但是 MongoDB 可以同时支持多个数据库实例,并存储集合,它们是组的文档,您可以插入单个文档,对吗?

(另外,请忽略集合 tweets 和 tweet_collection 之间的不一致。我只是在尝试以获得更好的理解)

4

1 回答 1

5

未经测试

from glob import iglob
import os.path
import pymongo
import json

for fname in iglob(os.path.expanduser('~/Tweets/*.txt')):
    with open(fname) as fin:
        tweets = json.load(fin)
        for tweet in tweets:
            db.tweets.insert(tweet)

这会遍历 '~/Tweets/*.txt' 中的所有文件名,打开它,然后将文件中的 1 条或多条推文加载到 Python 字典中——.load注意.loads使用.load()了while.loads()需要一个字符串。然后对于每条推文,将其插入数据库。(请注意,我使用db.tweets.insert而不是tweets = db.tweets因为我个人发现“db”前缀提醒它是数据库操作而不是其他对象)

至于您对 MongoDB re: DB's/collections/documents 的理解 - 是的,您是正确的。

于 2012-07-19T21:19:13.357 回答