2014-01-13 111 views
0

用下面的代码我试图从一个网站抓取数据每5分钟,时间戳它,计算其回报LOGN和追加所有到CSV文件。蟒蛇2.7:附加日志返回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'吗?您没有使用列表,不是真的,因为您追加** one **项目,然后将该项目写入您的CSV文件。 –

+0

您是否正在尝试根据您写入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