我正在尝试从文件中读取1000条推文。
http://rasinsrv07.cstcis.cti.depaul.edu/CSC455/Twitter_2013_11_12.txt
推文是逐行存储的。 我必须为'geo'条目创建一个SQL表。 'Geo'是推特词典中的字典。在某些情况下,词典'geo'是完全空白的,并且在它的情况下它具有值。我需要跟踪有多少地理词典是空白的,有多少有词。我需要为该表生成一个唯一的ID。除了ID列之外,geo表还应具有“type”,“longitude”和“latitude”列。如果Geo字典有值,它看起来像这样:
{u'type': u'Point', u'coordinates': [44.49241705, 11.33374359]}
由于我是Python和SQLITE的新手,我的代码是基本的(因为我希望能够理解我的代码),并且它没有按预期工作。如果地理字典的长度大于1,我试图在Geo表中插入,但它不起作用。任何意见都将不胜感激。
import urllib2, time, json, sqlite3
conn = sqlite3.connect('Tweets_Database_A6.db')
c = conn.cursor()
wFD = urllib2.urlopen('http://rasinsrv07.cstcis.cti.depaul.edu/CSC455/Twitter_2013_11_12.txt')
numLines = 1000
tweets = []
while numLines > 0:
line = wFD.readline()
numLines = numLines - 1
try:
tweets.append(json.loads(line))
except:
print line
wFD.close()
#create geo table using sqlite3
TblGeo = """create table Geo(Id number, Type text, Longitude number, latitude number);"""
c.execute(TblGeo)
HasGeo=0
NoGeo=0
for tweet in tweets:
tweet_geo = tweet['geo']
if len(tweet_geo) > 1:
HasGeo = HasGeo+1
try:
c.execute("insert into Geo(id, Type, Longitude, Latitude) values ('%s', '%s', '%s', '%s')" %(HasGeo, tweet_geo['type'], tweet_geo['coordinates'][0], tweet_geo['coordinates'][1]))
except:
print "no entry for " , i
else:
NoGeo = NoGeo+1
print HasGeo, " ", NoGeo
答案 0 :(得分:1)
您的代码失败有几个原因。由于这似乎是一项任务,我不会在此发布工作代码,但我会尝试指出正确的方向。以下是我在测试代码时注意到的一些事项:
我希望这很有帮助;如果你感到难过,可以随意提出额外的澄清。