【发布时间】:2015-03-01 19:34:54
【问题描述】:
我有一个从网站获取数据并应该粘贴到 Excel 工作表的代码。到目前为止一切都很好,除了excel部分。数据大量出现,我不明白为什么。通常应该是这样的;
Name1
Date1 Date2 Date3 Date4
Data1 Data2 Data3 Data4
Name2
Date1 Date2 Date3 Date4
Data1 Data2 Data3 Data4
Name3
Date1 Date2 Date3 Date4 ....
Data1 Data2 Data3 Data4 ...
但我得到了相同的数据 - name1 用于 A1:EO434 的范围,然后它再次更新 Name2 和 Name3 的所有单元格,依此类推。所以当循环结束时,我只看到最后一个数据复制到 A1:EO434 的 excel 范围
在这里;
.... ... ... .... .. ... .. ...
data_district = json.loads(r_district.text)
data_district = map(dict.values, data_district[u'output'][u'resultset'][u'record'][u'data'])
i = 0
for row in data_district:
Range("A"+ str(i + 1) ).value = zip(*data_district) #Not OK.
i = i+3
PS:这是完整的代码;
from xlwings import Workbook, Sheet, Range, Chart
import requests
import json
payload_city = {'cityId':3969, 'cmd':'districts'}
url = "https://www.garantimortgage.com/apps/Socket/Webservice.ashx"
r_city = requests.post(url, data=payload_city)
data_city = json.loads(r_city.text) #json to python data structure conversion
wb = Workbook()
mydict = data_city[:] #translation in to dictionary
for i in list(range(len(mydict))):
print data_city[i]["DistrictName"]
payload_district = {'cityId':data_city[i]["CityId"], 'lbDistricts':data_city[i]["DistrictCode"], 'criter':149,'startdate':'2003-01','cmd':'result','areaCode':data_city[i]["AreaWideCode"]}
r_district = requests.post(url, data=payload_district)
data_district = json.loads(r_district.text)
data_district = map(dict.values, data_district[u'output'][u'resultset'][u'record'][u'data'])
i = 0
for row in data_district:
Range("A"+ str(i + 1) ).value = zip(*data_district)
i = i+3
【问题讨论】:
-
可能值得将 csv 模块视为替代方案
-
查看基本的 Python 教程。例如。
mydict是字典列表,而不是字典。循环遍历列表很简单for i in mylist:不需要您对list、range、len执行任何操作。对于xlwings,请查看:docs.xlwings.org/datastructures.html - 不需要循环。 -
感谢您的建议。@thefragileomen,@FelixZumstein。但是,我使用循环的原因是数据的结构。所以,我有城市,在城市下我有区,每个区都有自己的数据。这就是为什么我认为我必须运行循环