1

現在、いくつかのテキスト ファイルを MongoDBにロードしようとしています (それらは JSON 形式です)。

OS walk を使ってみたのですが、うまくいかないようです。私の現在の方法は次のとおりです。

>>> 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 の間の矛盾を無視してください。理解を深めるために実験しただけです)

4

1 に答える 1

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ディクショナリに1つ以上のツイートをロードします-.load代わりにの使用に注意してください.loads-違い.load()はファイルのようなオブジェクトを取ります文字列を.loads()取ります。次に、ツイートごとに、それをデータベースに挿入します。(私が個人的に「db」プレフィックスを見つけたのではdb.tweets.insertなく、tweets = db.tweetsそれがDB操作であり、他のオブジェクトではないことを思い出させるために使用したことに注意してください)

MongoDB re:DB / collections /documentsについてのあなたの理解に関して-はい、あなたは正しいです。

于 2012-07-19T21:19:13.357 に答える