我目前正在尝试将几个文本文件加载到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之间的不一致..我只是在尝试更好地理解)
答案 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的理解:数据库/馆藏/文件 - 是的,你是对的。