我正试图通过各自的JSON API从货币交易所获得最后5个订单。一切正常,除了有一些硬币少于5个订单(询问/出价),导致表中的一些错误写入Excel。
以下是我现在所拥有的:
import grequests
import json
import itertools
active_sheet("Livecoin Queries")
urls3 = [
'https://api.livecoin.net/exchange/order_book?
currencyPair=RBIES/BTC&depth=5',
'https://api.livecoin.net/exchange/order_book?
currencyPair=REE/BTC&depth=5',
]
requests = (grequests.get(u) for u in urls3)
responses = grequests.map(requests)
CellRange("B28:DJ48").clear()
def make_column(catalog_response, name):
column = []
catalog1 = catalog_response.json()[name]
quantities1, rates1 = zip(*catalog1)
for quantity, rate in zip(quantities1, rates1):
column.append(quantity)
column.append(rate)
return column
bid_table = []
ask_table = []
for response in responses:
try:
bid_table.append(make_column(response,'bids'))
ask_table.append(make_column(response,'asks'))
except (KeyError,ValueError,AttributeError):
continue
Cell(28, 2).table = zip(*ask_table)
Cell(39, 2).table = zip(*bid_table)
我已经将链接列表分隔为两个,其中“REE”硬币就是问题所在。
我试过了:
for i in itertools.izip_longest(*bid_table):
#Cell(28, 2).table = zip(*ask_table)
#Cell(39, 2).table = zip(*i)
print(i)
在终端中打印得很好:
注意:截至目前,“REE”零投标订单因此最终创建一个空列表:
当打印到excel时,我得到了很多奇怪的输出。这些都不像终端中的样子。在Excel中设置信息的方式要求它是Cell(X,X).table
我的问题是,如何使用不均匀的列表进行压缩与DataNitro中的表格相匹配?
EDIT1: 问题出现在catalog_response.json()[name]
def make_column(catalog_response, name):
column = []
catalog1 = catalog_response.json()[name]
#quantities1, rates1 = list(itertools.izip_longest(*catalog1[0:5]))
print(catalog1)
#for quantity, rate in zip(quantities1, rates1):
# column.append(quantity)
# column.append(rate)
#return column
由于零出价甚至没有创建空列表,这就是我无法将它们压缩在一起的原因。 ValueError:解包需要超过0个值
答案 0 :(得分:0)
我建议你构建你打算写回excel的结构myTable。 它应该是一个列表列表
myTable = []
myRow = []
...从你的代码构建每个myRow ...
如果myRow列表的长度太短,请使用适当数量的[None]元素填充
在你的情况下如果len(myRow)
为0,你需要附加两个“无”项目
myRow.append(None)
myRow.append(None)
将行添加到输出表
myTable.append(myRow)
所以当你准备就绪时,你有一个格式正确的nn x n表来输出:
Cell(nn, n).table = myTable