python實例:導入會員數據後,讀取數據文件,檢查導入正確性(整列取excel值、合併列、response取值)

場景描述:某系統新上線,老系統的會員數據要導入新系統中,包含手機號,上級信息和會員餘額。有1萬多條數據,手工對比過於繁瑣,用python自動化處理

思路:系統導入數據後,腳本讀取文件,先把會員數據取出來,合併成一個數列,然後傳入查詢函數,把查詢結果和讀取的數據進行比對,判斷導入情況

 

數據文件內容如下圖

 

 

 

系統查詢接口信息如下:

 

 

 

第一步,讀取數據文件,合併成新的數列。這一部分腳本主要包含取excel中任意一列數據、循環讀取列數據傳到數列中、合併多個數列生成新數列

def phone():
    wb = xlrd.open_workbook(path+'\\2021.xlsx')# 打開Excel文件
    data = wb.sheet_by_name('sheet1')#通過excel表格名稱(rank)獲取工作表
    data_1=data.col_values(0)#獲取第一列數據(數組)#查詢號碼
    data_2=data.col_values(1)#獲取第二列數據(數組)#上級
    data_3=data.col_values(2)#獲取第三列數據(數組)#餘額
    list1=[]
    list2=[]
    list3=[]
    for i in data_1[1:10]:#循環讀取列數據傳到數列中,[1:10]代表只讀取第2行到第10行數據
        list1.append(i)
    for h in data_2[1:10]:
        list2.append(h)
    for j in data_3[1:10]:
        list3.append(j)
    name_tulpe = list(zip(list1,list2,list3))#合併多個數列生成新數列
    return(name_tulpe)
code=phone()

打印輸出結果

 

 

第二步,合併後的新數列傳到請求函數中,逐一查詢匹配結果。這一部分腳本主要用到數列的取值、數據拼接、request返回值json化後提取參數值

def data(params,headers,phone):
    for num in code:
        #分割數據,取出手機、上級、餘額(數列的取值)
        手機 = int(num[0])
        上級 = str(num[1])
        餘額 = str(num[2])
        print("查詢" + '  ' + str(手機))
        print("導入上級"+'  '+上級)
        print("導入餘額"+'  '+餘額)

        #通過手機號查詢上級(數據拼接)
        data = '{"PageIndex":1,"PageSize":10,"KeyWord":'+ str(手機) +',"MemberType":"","CardIds":[],"MinLastBuyDate":"","MaxLastBuyDate":"","TagIds":[],"MinPoints":"","MaxPoints":"","MinCreateDate":"","MaxCreateDate":"","SortName":"CreateTime","Sort":"Desc","Source":0,"topAgentId":-1,"CustomProvId":0,"WorkFriendType":0,"ConcernGzhType":0,"p":0.6919700775737443}'
        response = requests.post('https://storeapi.xxx.com/xxx/Member/SearchMemberList', headers=headers, params=params, data=data)
        response =  response.json()
        Id = response['Data']['DataList'][0]['Id']#客戶id
        FirstTwitterName = response['Data']['DataList'][0]['FirstTwitterName']#上級暱稱

        #通過id查詢餘額(request返回值json化)
        res = requests.get('https://storeapi.xxx.com/xxx/Member/FindMemberInfoById?Id='+str(Id), headers=headers)
        res = res.json()
        Balance = res['Data']['Balance']#餘額(提取參數值)

        #打印上級和餘額信息
        print("查詢上級"+'  '+FirstTwitterName)
        print("查詢餘額"+'  '+str(Balance))

        #判斷結果
        if 上級 == FirstTwitterName and str(Balance) == 餘額:
            print("匹配成功")
        else:
            print("匹配失敗")
        print("---------------")
data(params,headers,phone)

 

 執行後的結果

 

 

有個問題,如果數據太多,第一步合併新數列會花費很多時間,這裏還需要尋找更好的方案,或者用jmeter實現

 

全部腳本

# -*-coding:utf8-*-
# encoding:utf-8
import requests
import os
import sys
import xlrd


path = os.path.abspath(os.path.dirname(sys.argv[0]))

headers = {
    'authority': 'storeapi.xxxxx.com',
    'pragma': 'no-cache',
    'cache-control': 'no-cache',
    'access-control-request-method': 'POST',
    'origin': 'https://adminstore.xxxx.com',
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
    'access-control-request-headers': 'authorization,content-type,req-host',
    'accept': 'application/json',
    'sec-fetch-site': 'same-site',
    'sec-fetch-mode': 'cors',
    'referer': 'https://adminstore.xxxx.com/',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'req-host': 'adminstore.smallmitao.com',
    'authorization': 'Bearer xxxx.xxxxx.eKlCnRt8PCC8qdfjS3rOuhAywaulFc3Ad2ujrmNo8uQ',
    'content-type': 'application/json; charset=utf-8',
}

params = (
    ('rend', '0.4068877130021684'),
)



#讀取表格內的會員數據
def phone():
    wb = xlrd.open_workbook(path+'\\2021.xlsx')# 打開Excel文件
    data = wb.sheet_by_name('sheet1')#通過excel表格名稱(rank)獲取工作表
    data_1=data.col_values(0)#獲取第一列數據(數組)#查詢號碼
    data_2=data.col_values(1)#獲取第二列數據(數組)#上級
    data_3=data.col_values(2)#獲取第三列數據(數組)#餘額
    list1=[]
    list2=[]
    list3=[]
    for i in data_1[1:10]:#循環讀取列數據傳到數列中,[1:10]代表只讀取第2行到第10行數據
        list1.append(i)
    for h in data_2[1:10]:
        list2.append(h)
    for j in data_3[1:10]:
        list3.append(j)
    name_tulpe = list(zip(list1,list2,list3))#合併多個數列生成新數列
    return(name_tulpe)
code=phone()

def data(params,headers,phone):
    for num in code:
        #分割數據,取出手機、上級、餘額
        手機 = int(num[0])
        上級 = str(num[1])
        餘額 = str(num[2])
        print("查詢" + '  ' + str(手機))
        print("導入上級"+'  '+上級)
        print("導入餘額"+'  '+餘額)

        #通過手機號查詢上級
        data = '{"PageIndex":1,"PageSize":10,"KeyWord":'+ str(手機) +',"MemberType":"","CardIds":[],"MinLastBuyDate":"","MaxLastBuyDate":"","TagIds":[],"MinPoints":"","MaxPoints":"","MinCreateDate":"","MaxCreateDate":"","SortName":"CreateTime","Sort":"Desc","Source":0,"topAgentId":-1,"CustomProvId":0,"WorkFriendType":0,"ConcernGzhType":0,"p":0.6919700775737443}'
        response = requests.post('https://storeapi.xxx.com/xxxx/Member/SearchMemberList', headers=headers, params=params, data=data)
        response =  response.json()
        Id = response['Data']['DataList'][0]['Id']#客戶id
        FirstTwitterName = response['Data']['DataList'][0]['FirstTwitterName']#上級暱稱

        #通過id查詢餘額
        res = requests.get('https://storeapi.xxxx.com/xxxx/Member/FindMemberInfoById?Id='+str(Id), headers=headers)
        res = res.json()
        Balance = res['Data']['Balance']#餘額

        #打印上級和餘額信息
        print("查詢上級"+'  '+FirstTwitterName)
        print("查詢餘額"+'  '+str(Balance))

        #判斷結果
        if 上級 == FirstTwitterName and str(Balance) == 餘額:
            print("匹配成功")
        else:
            print("匹配失敗")
        print("---------------")
data(params,headers,phone)

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章