问题:数据库中的商品价格需要统一更新,新数据存在于Excel表中,原本的思路是准备使用apache的poi Excel工具类实现,但较为麻烦,经涛神点拨使用python实现,记录一下

实现思路与java并无区别,但具体步骤稍简单一些,Python集成了很强大的第三方库,本文使用xlrd扩展库读取Excel,(python3需要使用xlrd3扩展包)主要的一些方法如下:

  • 导入扩展库
import xlrd
  • 读取excel文件
data = xlrd.open_workbook('xxx.xls')
  • 读取数据
#通过sheet索引获取工作表
table = data.sheets()[0]
#row和col均为数组
row = table.row_values(i)
col = table.col_values(i)
#或者
cell = table.cell.values(x,y)
nrows = table.rows
ncols = table.cols
#循环行列表数据
for i in range(nrows):
  print table.row_values(i)

具体代码如下:

  • 导包
import xlrd
import urllib, urllib2
import json
  • 调用后台接口
def getItemBybarcode(barcode,itemBasePrice):
     url = "http://localhost:8080/api/editSaleItemBasePrice"
     textmod = {'barcode': barcode, 'itemBasePrice': itemBasePrice}
     textmod = urllib.urlencode(textmod)
     #调用后台接口
     req = urllib2.Request(url='%s%s%s' % (url, '?', textmod))
     res = urllib2.urlopen(req)
     res = res.read()
     jsones = json.loads(res)
     if(jsones['code'] == 'SUCCESS'):
          print u"商品条码:",barcode," ----->>> 更新成功! " , res

     else:
          print u"商品条码:", barcode, " ----->>> 更新失败!  ",res
  • 读取EXCEL数据
def main():
     data = xlrd.open_workbook('item.xls')
     #获取excel表中的sheets
     table = data.sheets()[0]
     #获取sheets中的每一行数据
     nrows = table.nrows
     #循环每一行数据得到每个单元格cell
     for i in range(nrows):
          itemName = table.cell_value(i,0)
          barcode = table.cell_value(i,1)
          itemBasePrice = table.cell_value(i,2)
          #调用后台接口请求修改价格
          getItemBybarcode(barcode, itemBasePrice)
          print itemName,barcode,itemBasePrice
  • 完成
if __name__ == '__main__':
     import sys
     reload(sys)
     sys.setdefaultencoding('utf-8')
     main()