使用PyMongo将几个文本文件加载到MongoDB中

时间:2012-07-19 19:51:16

标签: python mongodb pymongo

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

我尝试使用操作系统,但我似乎遇到了麻烦。 我目前的方法是:

>>> 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可以同时支持多个数据库实例,并存储集合,哪些是文档组,你可以插入单个文档,对吗?

(另外,请忽略集合推文和tweet_collection之间的不一致..我只是在尝试更好地理解)

1 个答案:

答案 0 :(得分: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'中的所有文件名,打开它,并将一个或多个推文从文件加载到Python字典中 - 注意使用.load代替{{ 1}} - 差异为.loads采用类似文件的对象,而.load()采用字符串。然后,对于每条推文,将其插入数据库。 (注意我使用了.loads()而不是db.tweets.insert因为我个人发现'db'前缀提醒它是一个DB操作而不是其他对象)

关于你对MongoDB的理解:数据库/馆藏/文件 - 是的,你是对的。