【问题标题】:python 2.7 : appending log return to csvpython 2.7:将日志返回附加到 csv
【发布时间】:2014-02-01 08:51:15
【问题描述】:

使用以下代码,我尝试每 5 分钟从网站获取数据,为其添加时间戳,计算其登录返回并将所有数据附加到 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()

我已经注释掉了我尝试计算和附加日志返回但不起作用的部分。

任何帮助将不胜感激!

【问题讨论】:

  • 您的预期输出是什么?当您取消注释行时会发生什么?
  • 您是先将数据读入coiAr 吗?您没有使用列表,不是真的,因为您附加 一个 项目,然后将该项目写出到您的 CSV 文件中。
  • 您是否尝试根据写入 CSV 文件的 previous 值计算日志?
  • 当我取消注释这些行时,我得到:未能获取市值列表指数超出范围 2014 年 1 月 13 日 15:08:19,12608482759.0,0.0。是的,我正在尝试根据 coiAr 中的先前值计算日志。
  • 你得到一个IndexError,很可能是因为你在索引 0 处只有一个条目?

标签: python python-2.7 csv logging append


【解决方案1】:

不要使用全局列表;只需将每个条目写入文件找到它。使用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 文件,只挑选最后写入的值。相反,您也可以将所有行保留在内存中,然后只选择列表列表中的最后一个条目。

【讨论】:

  • 我想我现在明白了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 2014-04-08
相关资源
最近更新 更多