首页 > 解决方案 > 列表循环不打印结果

问题描述

我希望在循环中使用日期对象列表,但我没有得到预期的输出。该函数包括日期和货币参数。'time_start'参数工作不正常。我想循环使用我在调用该函数之前生成的日期列表,但 API 向我发送以下错误。我试图将格式更改为日期对象,但它仍然无法正常工作。

错误:

{'status': {'timestamp': '2019-10-16T02:43:16.500Z', 'error_code': 400, 'error_message': '"time_start" must be a valid ISO 8601 timestamp or unix time value', 'elapsed': 0, 'credit_count': 0, 'notice': None}}

编码:

available = ['1WO', 'ABX',  'ADH',  'ALX',  'AMLT', 'BCH',  'BRC',  'BSV',  'BTC',  'BTRN', 'CAN',  'CEL',  'CHI',  'CMCT', 'COT',  'CRPT', 'DACS', 'DAI',  'DASH', 'DENT', 'DREAM',  'DRG',  'EARTH',  'ECH',  'ENJ',  'ETC',  'ETH',  'ETN',  'EZT',  'FANZ', 'FCT',  'FDX',  'FFC',  'FLIXX',  'FLP',  'FSN',  'FTT',  'FTX',  'GAT',  'GEN',  'GET',  'GUSD', 'GXC',  'GZE',  'HART', 'HERO', 'HOT',  'ICASH',  'IDH',  'IGNX', 'IHF',  'IND',  'IPSX', 'IXT',  'KRL',  'LALA', 'LDC',  'LIKE', 'LND',  'LTC',  'MCO',  'MFUN', 'MGO',  'MITH', 'MITX', 'MRK',  'MT', 'MTN',  'NEO',  'NPLC', 'OAX',  'OMG',  'ONG',  'ONT',  'ORBS', 'PAL',  'PLG',  'PMA',  'PPL',  'PWV',  'QASH', 'QCTN', 'QTUM', 'RBLX', 'REP',  'RFOX', 'SAL',  'SER',  'SGN',  'SIX',  'SNIP', 'SNX',  'SPHTX',  'SPIKE',  'STAC', 'STACS',  'STORJ',  'STU',  'STX',  'THRT', 'THX',  'TPAY', 'TPT',  'TRX',  'TTU',  'UBT',  'UBTC', 'UKG',  'USDC', 'VANY', 'VET',  'VUU',  'VZT',  'WIN',  'WLO',  'XEM',  'XES',  'XLM',  'XMR',  'XNK',  'XRP',  'XTX',  'ZCO',  'ZEC',  'ZPR']

def getOHLCV(currencies, start_dates):
   c_price = []
   data = {}
   try:
       url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical'
       parameters = {
          'symbol': ",".join(currencies),
          'time_start': ",".join(start_dates),
          'count':'91',
          'interval':'daily',
          'convert':'JPY'
        }
        headers = {
          'Accepts': 'application/json',
          'X-CMC_PRO_API_KEY': 'xxxxxxxxxxxxxxxxxxxxxxxxx'
        }
        session = Session()
        session.headers.update(headers)
       response = session.get(url, params=parameters)
       data = json.loads(response.text)
       for currency in  data['data']:
           used_list = [
               item['quote']['JPY']
               for item in data['data'][currency]['quotes']
           ]
           price = pd.DataFrame.from_records(used_list)
           price['timestamp'] = pd.to_datetime(price['timestamp'])
           price['timestamp'] = price['timestamp'].astype(str).str[:-15]
           price_c = price.set_index('timestamp').close
           c_price.append(price_c.rename(currency))
   except Exception as e:
        print (data)
   return c_price

date_list = [(date.today() - timedelta(days= x * 91)).strftime('%Y-%m-%d') for x in range(3)]
one = []
for i in date_list:
  c_price = []
  c_price.extend(getOHLCV(available[:61], i))
  c_price.extend(getOHLCV(available[61:], i))
  #c_price = pd.concat(c_price, axis=1, sort=True)
  one.append(c_price)

标签: pythonloops

解决方案


您需要将日期转换为时间戳格式:

from datetime import datetime
from datetime import timezone

dat = '2019-10-16T02:43:16.500Z'
dat = datetime.strptime(dat, '%Y-%m-%dT%H:%M:%S.%fZ')
print(dat)
timestamp = dat.replace(tzinfo=timezone.utc).timestamp()
print(timestamp)

输出 :

2019-10-16 02:43:16.500000
 1571193796.5

推荐阅读