2012-07-19 106 views
1

我目前正在尝试将几个文本文件加载到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之间的矛盾。我只是尝试,以获得更好的理解)

+0

每个文件是否有单个/多个推文? (因为名称* Tweets.txt意味着> 1) – 2012-07-19 21:04:31

+0

是的,每个文件包含多个推文,但每个推文都有自己的行。对不起,响应缓慢。 – Noc 2012-07-23 16:37:56

回答

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 - 区别在于​​需要类文件对象,而.loads()接受一个字符串。然后,对于每条推文,将其插入数据库。 (注意我用db.tweets.insert而不是tweets = db.tweets,因为我个人发现'db'前缀提示它是数据库操作而不是其他对象)

至于你对MongoDB的理解:DB's/collections/documents - yes ,你是对的。

+0

嗯,我试了一下,它提供了以下错误: 回溯(最近通话最后一个): 文件 “masspush.py”,13号线,在 鸣叫= json.load(FIN) 文件“/ usr/lib/python2.7/json/__ init__.py“,第278行,载入中 ** kw) 文件”/usr/lib/python2.7/json/__init__.py“,第326行,载入中 返回_default_decoder.decode(s) 解压缩文件“/usr/lib/python2.7/json/decoder.py”,第369行 raise ValueError(errmsg(“Extra data”,s,end,len(s) )) ValueError:Extra data:line 2 column 1 - line 218 column 1(char 2590 - 554222) 对不起f ormatting。 @Jon Clements – Noc 2012-07-23 16:53:54

+0

您是否可以复制并发布该位和一些周围的数据? – 2012-07-23 17:48:05

+0

你是指文本文件本身? 问题是有~500个文件,我不确定*哪个*文件指的是有额外的数据。 – Noc 2012-07-23 17:50:47

相关问题