2014-01-13 5 views
0

С помощью следующего кода я пытаюсь получить данные с веб-сайта каждые 5 минут, отметьте его время, подсчитайте его возврат в лог и добавьте все это в файл csv.python 2.7: appending log return to csv

Схват данных, время их штамповки и добавление к работам csv, но когда я пытаюсь выяснить, как включить возврат журнала, я как бы застрял.

import time 
from time import strftime, gmtime 
import numpy as np 
import urllib2 
from urllib2 import urlopen 
from math import log 

coiAr = [] 
dateAr = [] 
logReAr = [] 

def mcapGrab(): 
    while True: 
     try: 
      sourceCode = urllib2.urlopen('http://coinmarketcap.com').read() 

      mcapUSD = sourceCode.split('<strong>Total Market Cap: <span id="total-marketcap" data-usd="')[1].split('"')[0] 
      coiAr.append(float(mcapUSD.replace(',',''))) 

      date = strftime('%d %b %Y %H:%M:%S', gmtime()) 
      dateAr.append(date)   
#   if len(coiAr) > 0: 
#    indexLog = 1 
#    logRe = log(coiAr[indexLog]/coiAr[indexLog-1]) 
#    logReAr.append(logRe) 
#    indexLog += 1 
#   else: 
#    logReAr.append(0) 

      for eachMcap in coiAr: 
       saveLine = date+','+str(eachMcap)+'\n' 
       saveFile = open('mcapdata.csv', 'a') 
       saveFile.write(saveLine) 
       saveFile.close() 

       s = 0 
       print dateAr[s]+','+str(coiAr[s]) 
       time.sleep(300) 
       s+= 1 


     except Exception, e: 
      print 'Failed to grab market cap', str(e) 

mcapGrab() 

Я прокомментировал раздел, где я пытаюсь вычислить и добавить журнал, но не работает.

Любая помощь будет оценена!

+0

Каков ваш ожидаемый выход? Что происходит, когда вы раскомментируете свои строки? –

+0

Вы сначала читаете данные в 'coiAr'? Вы не используете этот список, не совсем, поскольку вы добавляете ** один ** элемент, а затем записываете один элемент в свой CSV-файл. –

+0

Вы пытаетесь вычислить журнал на основе значения * previous *, которое вы написали в CSV-файле? –

ответ

0

Не используйте глобальные списки; просто напишите каждую запись в файл , так как вы найдете его. Использование csv модуль сделает это все немного проще еще:

import csv 

sourceCode = urllib2.urlopen('http://coinmarketcap.com').read() 
mcapUSD = sourceCode.split('<strong>Total Market Cap: <span id="total-marketcap" data-usd="')[1].split('"')[0] 
mcap = float(mcapUSD.replace(',','') 

# read previous value from the CSV first 
with open('mcapdata.csv', 'rb') as infh: 
    last = None 
    for row in csv.reader(infh): 
     last = row[1] # second column 

# Now calculate the log value based on the last value 
logRe = log(mcap/float(last)) 

# write new values 
with open(mcapdata.csv', 'ab') as outfh: 
    date = strftime('%d %b %Y %H:%M:%S', gmtime()) 
    csv.writer(outfh).writerow([date, mcap, logRe]) 

Этот код будет читать файл mcapdata.csv, выбирая только последнее значение, записанное в ней. Вместо этого вы можете сохранить все строки в памяти и просто выбрать последнюю запись в списке списков.

+0

Думаю, я получил его сейчас. Благодаря! – user1286695