2015-05-26 2 views
0

Я использую API-интерфейс Twitter Streaming для получения твитов, соответствующих определенному ключевому слову. Полученный результат записывается в файл. Я делаю некоторое базовое сравнение, основанное на расстоянии, из которого происходит твит, и я пишу для отдельного файла соответственно.Twitter Streaming API Python - запись неполных данных в файл

 lat2=float(d['geo']['coordinates'][0]) 
     long2=float(d['geo']['coordinates'][1]) 
     lat1=venue_latitude 
     long1=venue_longitude 
     lon1, lat1, lon2, lat2 = map(radians, [long1, lat1, long2, lat2]) 
     dlon = lon2 - lon1 
     dlat = lat2 - lat1 
     a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2 
     c = 2 * asin(sqrt(a)) 
     distance = 6367 * c * 0.621371 
     if distance < 1: 
      user= d['user']['screen_name'] 
      user_id=d['user']['id'] 
      file=open('Tweets_within_one_mile.txt','a') 
      users.append(user) 
      text=str(user) + str(user_id)+ "qwertyasdfgzxcvb" + str(distance) + d['text'] 
      u = text.encode('utf-8') 
      file.write(u) 
      file.close() 
     if distance > 2 and distance < 60: 
      user= d['user']['screen_name'] 
      user_id=d['user']['id'] 
      file=open('Tweets_within_sixty_miles.txt','a') 
      users.append(user) 
      text=str(user) + str(user_id) + str(co_lon2) +d['text'] 
      u = text.encode('utf-8') 
      file.write(u) 
      file.close() 

Когда я запустил сценарий в последний раз. Количество собранных твитов составило 30 000. Но только 20 000 твитов были полностью записаны в файл. Остальные 10 000 были незарегистрированными.

Есть ли проблема с выходным буфером Python?

ответ

0

Я не могу быть уверенным, что это точная причина, по которой только часть из них была сохранена, но способ, по которому вы построили свои операторы if, может иметь какое-то отношение к ней.

Например:

if distance < 1: 
    print("foo") 

if distance > 2 or distance a < 60: 
    print("bar") 
  1. Этот код работает для значений меньше, но НЕ равен 1.
  2. чисел между 1 и 2 не будет работать (т.е. 1,1 до 1,9)
  3. число, равное 2 или 60
  4. Числа больше 60

Aga in, не уверены, какие именно значения вы пытаетесь получить, но, возможно, это может помочь (он будет захватывать все данные):

if distance <= 1: 
    print("foo") 

if 2 <=distance or distance <= 60: 
    print("bar") 
Смежные вопросы