1

以下のコードで (少なくとも) 2 つの問題があります。

私の目標は、各ツイートを読み取り、JSON を使用して変数を解析し、それを SQLlite の独自の行に配置することです。ツイート内のすべての変数のうち、6 つだけが必要です。

ツイートを正常に読み取ることができます (DB とテーブルは問題なく作成されます)。

1) 辞書の作成でエラーが発生します。「dicttが定義されていません」と表示されます。(以前は機能していましたが、機能しなくなるために何かをしました)。

2) dictt が機能すると、最初のつぶやきだけがロードされます。すべてのツイートをロードしたい。したがって、そのループには問題があります。

どちらかを助けますか?

#Created the DB
import sqlite3
conn = sqlite3.connect('twitter.db')
c = conn.cursor()

#Created the table for the tweets
c.execute("CREATE TABLE IF NOT EXISTS Tweet(created_at, id, text, source, in_reply_to_user_ID,retweet_Count)")
import json
import urllib2
#Read file and print a line
webFD = urllib2.urlopen("http://rasinsrv07.cstcis.cti.depaul.edu/CSC455/assignment4.txt")
tweets = webFD.readlines()

#prints all tweets
for tweet in tweets:
    print tweet


#create dictionary
try:
    dictt = json.loads(tweet)
except ValueError:
    continue

#print dictionary to verify
print dictt.keys()

#print values to verify
print dictt.values()



#to load all parsed tweets into sqlite
for elt in tweets:
    currentRow = elt[:-1].split(", ")
c.execute('INSERT INTO Tweet VALUES (?, ?, ?, ?, ?, ?)',
        (dictt['created_at'], dictt["id"], dictt["text"], dictt['source'], dictt['in_reply_to_user_id'],
           dictt['retweet_count']))
conn.commit()
conn.close()
4

1 に答える 1

0

注: 「つぶやき」には JSON ではなく文字列コンテンツがあるため、つぶやきに : は必要ありませんでした。

したがって、コードについては、「ロード」する前に「ダンプ」を取得してみてください。

try:
    tweets = json.dumps(tweets)
    dictt = json.loads(tweets)
except ValueError:
    pass #other codes

"dumps" は、文字列を JSON として変換します。

その後、「dictt」をテストできます:

for i in dictt:
    print i

コードは次のようになります。

#Created the DB
import sqlite3
conn = sqlite3.connect('twitter.db')
c = conn.cursor()

#Created the table for the tweets
c.execute("CREATE TABLE IF NOT EXISTS Tweet(created_at, id, text, source, in_reply_to_user_ID,retweet_Count)")
import json
import urllib2
#Read file and print a line
webFD = urllib2.urlopen("http://rasinsrv07.cstcis.cti.depaul.edu/CSC455/assignment4.txt")
tweets = webFD.readlines()

#create dictionary
try:
    tweets = json.dumps(tweets)
    dictt = json.loads(tweets)
except ValueError:
    print "invalid data"

for i in dictt:
    try:
        print json.loads(i).get('user').get('name')
        #print json.loads(i)['user']['name']
    except ValueError:
        print "can't read"

その後、データをデータベースに保存できます。

于 2013-11-07T05:01:10.177 に答える