2012-07-19 146 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

相關問題