1. 首页
  2. Python

Python如何将数据保存在execl中,Xlwings模块教它做人

“u003Cdivu003Eu003Cpu003E比如说,我们在一个快递网站上爬取了几个快递的轨迹信息,我们需要将数据保存下来,一个常规做法是把数据保存在数据库里(Mysql,MongoDB,Redis),另一个是用Excel的形式存下来。对于非程序员来说,后者更加普遍,毕竟Excel是世界上使用最广泛的数据分析工具。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F2cc4813feb0444ada066ea44998408c3″ img_width=”1200″ img_height=”800″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E这次我们用xlwings来实现:u003Cu002Fpu003Eu003Colu003Eu003Cliu003E保存数据更新数据u003Cu002Fliu003Eu003Cu002Folu003Eu003Cpu003E假设我们爬取到了快递信息,并且已经处理成了二维列表的形式以便处理(非本文重点不细说):u003Cu002Fpu003Eu003Cpu003E1.保存数据u003Cu002Fpu003Eu003Cpreu003Eimport xlwings as xwu003Cbru003Ewb = xw.Book()u003Cbru003Esht = wb.sheets[0]u003Cbru003Einfo_list = [[‘20190001′,’已揽收’,’凯撒邮局’],u003Cbru003E[‘20190001′,’已发货’,’凯撒邮局’],u003Cbru003E[‘20192288′,’已揽收’,’麻花镇邮局’],u003Cbru003E[‘20192288′,’已发货’,’麻花镇邮局’],u003Cbru003E[‘20192288′,’正在派送’,’阿里山’]]u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E首先,写入表头,u003Cu002Fpu003Eu003Cpreu003Etitles = [[‘包裹号’,’状态’,’地点’]]u003Cbru003Esht.range(‘a1’).value = titlesu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E然后写入轨迹信息u003Cu002Fpu003Eu003Cpreu003Esht.range(‘a2’).value = info_listu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E保存u003Cu002Fpu003Eu003Cpreu003Ewb.save(‘Track.xlsx’)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E这样,第一步保存数据就完成了u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F6552f564c4444b458fdddcca224cfb0d” img_width=”228″ img_height=”90″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E2.更新数据u003Cu002Fpu003Eu003Cpu003E我们第二天又爬取了一次信息,发现信息更新了:u003Cu002Fpu003Eu003Cpu003E[u003Cu002Fpu003Eu003Cpu003E[‘20190001′,’已揽收’,’凯撒邮局’],u003Cu002Fpu003Eu003Cpu003E[‘20190001′,’已发货’,’凯撒邮局’],u003Cu002Fpu003Eu003Cpu003Eu003Cemu003E[‘20190001′,’正在派送’,’王村村口’],u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cemu003E[‘20190001′,’已签收’,’老王家’],u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003E[‘20192288′,’已揽收’,’麻花镇邮局’],u003Cu002Fpu003Eu003Cpu003E[‘20192288′,’已发货’,’麻花镇邮局’],u003Cu002Fpu003Eu003Cpu003E[‘20192288′,’正在派送’,’阿里山’],u003Cu002Fpu003Eu003Cpu003Eu003Cemu003E[‘20192288′,’已发货’,’小马家’]u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003E]u003Cu002Fpu003Eu003Cpu003E更新数据其实没什么难度,直接覆盖写入就好了u003Cu002Fpu003Eu003Cpu003E但是如果我想知道更新了多少条记录怎么办呢?u003Cu002Fpu003Eu003Cpu003E将数据去重,剩下的就是更新的u003Cu002Fpu003Eu003Cpu003E首先读取之前写入的信息:u003Cu002Fpu003Eu003Cpreu003Eimport xlwings as xwu003Cbru003Ewb = xw.Book(‘Track.xlsx’)u003Cbru003Esht = wb.sheets[0]u003Cbru003Efirst = sht.range(‘a2’).expand(‘table’).valueu003Cbru003Eprint(first)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E结果如下u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F40249fa8f6cb42c9b4ad061ae86fa7ec” img_width=”720″ img_height=”89″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E乍一看没什么问题,仔细一看,包裹号都成了浮点数!写入的时候是字符串,读取出来就成了浮点数,所以这时候去重,由于数据类型不一致,无法真正去重。u003Cu002Fpu003Eu003Cpu003E思路一:直接转化数据类型,将每个列表的第一个元素转为整数,再转为字符串u003Cu002Fpu003Eu003Cpreu003Efor i in first:u003Cbru003E i[0] = str(round(i[0]))u003Cbru003E first_str.append(i)u003Cbru003Eprint(first_str)u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F2d1bb409c5ab4a349c2be7b51309c313″ img_width=”549″ img_height=”73″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E思路二:如果大家对Excel熟悉的话,就会知道,在数字前面加一个英文字符的单引号(’),数字就变成文本格式了,所以我们可以在写入信息的时候加上一个单引号,这样Excel就不会乱改格式了。(以后可能会写一些Excel方面的东西)u003Cu002Fpu003Eu003Cpreu003Eimport xlwings as xwu003Cbru003Ewb = xw.Book(‘Track.xlsx’)u003Cbru003Esht = wb.sheets[0]u003Cbru003Einfo_list = [[“‘20190001″,”已揽收”,”凯撒邮局”],u003Cbru003E[“‘20190001″,”已发货”,”凯撒邮局”],u003Cbru003E[“‘20192288″,”已揽收”,”麻花镇邮局”],u003Cbru003E[“‘20192288″,”已发货”,”麻花镇邮局”],u003Cbru003E[“‘20192288″,”正在派送”,”阿里山”]]u003Cbru003Esht.range(‘a2’).value = info_listu003Cbru003Evalues = sht.range(‘a2’).expand(‘table’).valueu003Cbru003Eprint(values)u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F09d46a508003416d93a6088cf9411238″ img_width=”720″ img_height=”105″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E然后开始真正的去重u003Cu002Fpu003Eu003Cpreu003Eextra = [i for i in second if i not in first_str]u003Cbru003Eprint(extra)u003Cbru003Eprint(len(extra))u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E结果没问题,多出三个轨迹信息u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F8ba7e502556945dd8f6c943727cca9be” img_width=”720″ img_height=”103″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E为了介绍xlwings的插入功能,我们再来设想这样一种情况:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002F3097963e-4da8-4219-911d-efb9bf7c24e8″ img_width=”1200″ img_height=”798″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E已经有了两个包裹的轨迹情况u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F9f0e3eb5c2f1428fac79048fcc3b2cef” img_width=”197″ img_height=”140″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E但是我们得到了20190001包裹的最新情况,需要更新这一个包裹的信息:u003Cu002Fpu003Eu003Cpu003E[u003Cu002Fpu003Eu003Cpu003E[“20190001″,”已揽收”,”凯撒邮局”],u003Cu002Fpu003Eu003Cpu003E[“20190001″,”已发货”,”凯撒邮局”],u003Cu002Fpu003Eu003Cpu003E[“20190001″,”正在派送”,”王村村口”],u003Cu002Fpu003Eu003Cpu003Eu003Cemu003E[“20190001″,”已签收”,”老王家”]u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003E]u003Cu002Fpu003Eu003Cpu003E首先,去重u003Cu002Fpu003Eu003Cpreu003Eextra = [i for i in second if i not in first_str]u003Cbru003Eprint(extra)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E显示要更新的就一条u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F2d93e6de5eaf447a9fc9c4e9fd55e9fe” img_width=”421″ img_height=”66″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E读取第一列的包裹号u003Cu002Fpu003Eu003Cpreu003Erng = sht.range(‘a1’).expand(‘table’)u003Cbru003Enrows = rng.rows.countu003Cbru003Erow_a = sht.range(f’a1:a{nrows}’).valueu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E找到要更新的包裹号u003Cu002Fpu003Eu003Cpreu003Efor i in extra:u003Cbru003E pkg = i[0]u003Cbru003E position = row_a.index(pkg)u003Cbru003E print(position)u003Cbru003E times = row_a.count(pkg)u003Cbru003E print(times)u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F63665a986f224d30aed0de99767457bc” img_width=”254″ img_height=”109″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eposition = 1 是指在第二行出现,times = 3 是指一共有3个此包裹号的信息u003Cu002Fpu003Eu003Cpu003E所以要在第五行插入u003Cu002Fpu003Eu003Cpreu003Erows = position+times+1u003Cbru003Esht.range(f'{rows}:{rows}’).api.Insert()u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fefd8097c9d6a4edcb89d67869cf09295″ img_width=”226″ img_height=”142″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E然后再写入更新的信息u003Cu002Fpu003Eu003Cpreu003Esht.range(f’a{rows}’).value = extrau003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E大功告成!保存u003Cu002Fpu003Eu003Cpreu003Ewb.save()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E其实折腾了半天都是为了这个插入语句u003Cu002Fpu003Eu003Cpreu003Esht.range(‘单元格或行列’).api.Insert()u003Cbru003E#插入列u003Cbru003Esht.range(‘a:a’).api.Insert()u003Cbru003E#插入行u003Cbru003Esht.range(‘2:2’).api.Insert()u003Cbru003E#插入单元格u003Cbru003Esht.range(‘b4’).api.Insert()u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fdfic-imagehandleru002F4180a0ef-bbfe-4f5c-b6f0-78f21a1a11e1″ img_width=”1200″ img_height=”901″ alt=”Python如何将数据保存在execl中,Xlwings模块教它做人” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:Python如何将数据保存在execl中,Xlwings模块教它做人

主题测试文章,只做测试使用。发布者:逗乐男神i,转转请注明出处:http://www.cxybcw.com/12928.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code