首页 > 代码库 > 在实现从excel中读取数据作为接口参数遇到的问题

在实现从excel中读取数据作为接口参数遇到的问题

这个算我自己第一次使用python语言实现 一个功能
一、首先我们先要代码实现如何从excel上读取数据python实现还是比较简单的
1.我使用的是xlrd模块,我们先要安装这个包,这样我们才可以使用它
安装方法:
a.可以直接把文件拷贝到 $python_dir/Lib,这方法我试了一下不可以,我也不知道为什么
b.我下载了xlrd模块,在目录下运行了python setup.py install,成功了
可以去https://pypi.python.org/pypi/xlrd   官网下载
另外还有很多方式,你可以自己去百度搜索
2.就可以代码实现了
 1 import xlrd
 2 class ExcelHandleImpl(object):
 3     ‘‘‘
 4     classdocs
 5     ‘‘‘
 6     
 7     def __init__(self):
 8         ‘‘‘
 9         Constructor
10         ‘‘‘
11         self.filename = None
12     #打开excel
13     def open_excel(self,filename):
14         try:
15             data =http://www.mamicode.com/ xlrd.open_workbook(filename)
16             return data
17         except Exception,e:
18             print str(e)
19      #根据sheet名字获取信息         
20     def excel_table_byname(self,filename,colnameindex=0,by_name=umerchant):
21         # 实例化类 
22              bswi = ExcelHandleImpl()
23         data =http://www.mamicode.com/ bswi.open_excel(filename)
24         table = data.sheet_by_name(by_name)
25         #得到表格行数
26         nrows = table.nrows
27             #得到第一行的数据
28         colnames = table.row_values(colnameindex)
29         print colnames 
30         list = []
31         for rownum in range(1,nrows):
32             row = table.row_values(rownum)
33             if row:
34                 app = {}
35                             #组成字典
36                 for i in range(len(colnames)):
37                     app[colnames[i]] = row[i]
38                 list.append(app)
39         return list
这段代码我也参考网上的一位大神的,要是你搜关于python实现excel应该可以搜到哪位大神的,他还有另外几种方式的实现
调用这段代码:
       
1 excel = ExcelHandleImpl()
2 tables = excel.excel_table_byname(C:\Users\BG302224\Desktop\datasetup.xlsx,0,goods)

 

我主要想说一下读取的字符串和接口的传参,这边主要我是第一次实现所以遇到了序列化的问题
1.比如我们需要的传参是这样的:{message: {"merchantstatus": "1", "alipayaccount": "", "contactphone": "33", "merchantname": "Test", "remark": "Test", "memberstatus": "0", "alipayname": "", "contactaddress": "Test", "principal": "SDET-Test"}}
a.我们序列化的内容应该是message之后的内容,先把取出来的表格内容序列化,之后再与message拼装
    
excel = ExcelHandleImpl()
tables = excel.excel_table_byname(C:\Users\BG302224\Desktop\datasetup.xlsx)
for row in tables:
  print row
  row = json.dumps(row)
  row
= {"message":row}
b.你看到了请求的数据都是字符串的形式,要是你直接在表格填写1,这样你读取出来的内容会是数据,还会带有小数据点,所以我都是把把表格中数据的单元格的格式转化成文本格式,这个读出来就是字符串的形式了,还有要是你就要数据的话,但是数据不包含小数点,这时候你需要在代码中实现转化
row[merchantstatus] = eval(row[merchantstatus])
经过这样的转化就不会包含小数点了
c.还有一种就是传的参数是null,但是python没有null,我们之前有提到我们是将表格的数据以字典的形式,这时候你就可以利用key,修改vlue值,
row[alipayaccount] = ‘‘
改成这种形式,请求给后台就会变成null,是什么原因我也不知道,要是哪位知道的话也可以告诉我。
d.还有一种就是参数中包含数组,因为我们从表格中获取的话,取出来的都是字符串,
我也进行了转化
row[merchantstatus] = eval(row[merchantstatus])

e.要是请求参数是以这种方式的:id:“1234”,name:“三生三世十里桃花”

是将冒号后面的字符串序列 话

id = "1234"
name = "0001"
data = {"id":json.dumps(id),"name":json.dumps(name)}

要是有更好的建议可以告诉我!!!!

 
 
 
 

 

在实现从excel中读取数据作为接口参数遇到的问题