使用PyMongo将多个文本文件加载到MongoDB中
我目前正在尝试将几个文本文件加载到MongoDB中(它们是JSON格式)。使用PyMongo将多个文本文件加载到MongoDB中
我试过使用操作系统散步,但我似乎遇到了麻烦。 我当前的方法是:
>>> 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)
...
为了插入一个单一的资料Tweet。 我希望能够打开多个文件并运行同一段代码,即将JSON转换为python字典并将其自动插入到集合中的for循环。
有没有人有一个坚实的例子,如何做到这一点,并附有解释?
虽然我们谈论了这个话题,但我试图使用对数据库理解不够的MongoDB(我知道愚蠢愚蠢),但是MongoDB可以同时支持多个数据库实例,并存储集合,它们是文档组,您可以插入单个文档,更正吗?
(另外,请忽略集合鸣叫和tweet_collection之间的矛盾。我只是尝试,以获得更好的理解)
未经检验
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
- 区别在于需要类文件对象,而.loads()
接受一个字符串。然后,对于每条推文,将其插入数据库。 (注意我用db.tweets.insert
而不是tweets = db.tweets
,因为我个人发现'db'前缀提示它是数据库操作而不是其他对象)
至于你对MongoDB的理解:DB's/collections/documents - yes ,你是对的。
嗯,我试了一下,它提供了以下错误: 回溯(最近通话最后一个): 文件 “masspush.py”,13号线,在
您是否可以复制并发布该位和一些周围的数据? – 2012-07-23 17:48:05
你是指文本文件本身? 问题是有~500个文件,我不确定*哪个*文件指的是有额外的数据。 – Noc 2012-07-23 17:50:47
每个文件是否有单个/多个推文? (因为名称* Tweets.txt意味着> 1) – 2012-07-19 21:04:31
是的,每个文件包含多个推文,但每个推文都有自己的行。对不起,响应缓慢。 – Noc 2012-07-23 16:37:56