Python批量上傳文件信息到服務(wù)器的實(shí)現(xiàn)示例
一、背景
在進(jìn)行軟件測(cè)試的過(guò)程中,經(jīng)常會(huì)需要準(zhǔn)備一批數(shù)據(jù),這不,今天就遇到了:后端開發(fā)好了文件信息上傳接口,可是前端并未開發(fā)出相關(guān)界面,而其他同學(xué)正在調(diào)試其他接口,需要用到文件信息,那么這個(gè)時(shí)候就需要我上場(chǎng)了
簡(jiǎn)而言之就是需要通過(guò)接口上傳一批文件信息到服務(wù)器
二、準(zhǔn)備工作
1.Python環(huán)境:家中常備,這個(gè)就不多說(shuō)了
2.requests第三方庫(kù):用于向服務(wù)器發(fā)送請(qǐng)求,未安裝的同學(xué)移步控制臺(tái)輸入以下命令
pip install requests
3.源文件:將不同類型的文件(excel、word、pdf)放到一個(gè)文件夾下
4.文件云存儲(chǔ)地址:文件已經(jīng)批量上傳到了云服務(wù)器,文件云存儲(chǔ)地址示例:https://your_file_head_url/file_name.pdf
5.上傳接口:從接口文檔查看接口地址、傳參、響應(yīng)等,沒(méi)有接口文檔的情況請(qǐng)同學(xué)們另辟蹊徑
三、編寫腳本
獲取文件名和類型
源文件夾是這樣的:
源文件名稱是正常的,不包含“.”
源文件后綴也是正常的,與文件類型匹配
這里簡(jiǎn)單快速處理,使用split方法通過(guò)“.”將文件分割出名稱和文件類型
dir_path = 'C:\\Users\\Administrator\\Desktop\\test_file' # 獲取文件名和類型 file_list = os.listdir(dir_path) # 文件列表 file_name_list = [] # 定義文件名列表 file_type_list = [] # 定義文件類型列表 for i in file_list: file_name = i.split('.')[0] # 文件名 file_type = i.split('.')[-1] # 文件類型 file_name_list.append(file_name) file_type_list.append(file_type) print(file_name_list) print(file_type_list)
運(yùn)行結(jié)果:
拼接文件信息
根據(jù)接口文檔,上傳的文件信息需要包含類型、名稱、狀態(tài)、url四個(gè)參數(shù),這就需要對(duì)每個(gè)文件信息進(jìn)行拼接
這里使用了enumerate函數(shù)來(lái)遍歷文件名列表,可以枚舉出列表的下標(biāo)和值,灰常好用
注意:文件類型存在大寫字母的情況(PDF,DOC等),所以使用lower函數(shù)將文件名轉(zhuǎn)換為小寫后再判斷對(duì)應(yīng)的參數(shù)值
# 拼接文件信息 file_url_head = 'https://your_file_head_url/' # 云存儲(chǔ)地址 type_para_list = [1, 2, 3] # 文件類型列表:1--excel, 2--word, 3--pdf file_msg_li = [] # 文件信息列表 for i, v in enumerate(file_name_list): # 遍歷文件名列表 if file_type_list[i].lower() in ['xlsx', 'xls']: type_para = 1 elif file_type_list[i].lower() in ['docx', 'doc']: type_para = 2 elif file_type_list[i].lower() == 'pdf': type_para = 3 else: type_para = 0 file_msg = { "file_type": type_para, "name": v, "status": random.choice(['true', 'false']), # 隨機(jī)狀態(tài)參數(shù) "file_url": file_url_head + file_list[i] # 拼接文件url } file_msg_li.append(file_msg) pprint(file_msg_li)
運(yùn)行結(jié)果:
文件信息批量上傳
使用requests.post方法請(qǐng)求接口即可
# 文件信息批量上傳 for i in file_msg_li: res = requests.post(url=server_url, json=i) print(res.json())
運(yùn)行結(jié)果:
下面是控制臺(tái)打印的接口請(qǐng)求返回結(jié)果:
下圖是數(shù)據(jù)庫(kù)的查詢結(jié)果:
四、優(yōu)化
1.寫到一個(gè)方法中,傳入文件路徑和地址等參數(shù)
2.使用列表推導(dǎo)式簡(jiǎn)化代碼
3.文件類型列表改為字典,根據(jù)類型快速查找對(duì)應(yīng)的參數(shù)
4添加接口響應(yīng)異常情況處理
優(yōu)化后完整代碼:
import os import random import requests def file_msg_to_server(dir_path, file_url_head, server_url): # 獲取文件名和類型 file_list = os.listdir(dir_path) file_name_list = [i.split('.')[0] for i in file_list] file_type_list = [i.split('.')[-1] for i in file_list] # 拼接文件信息 type_para_dict = {'xlsx': 1, 'xls': 1, 'docx': 2, 'doc': 2, 'pdf': 3} # 文件類型字典:1--excel, 2--word, 3--pdf file_msg_li = [{ "file_type": type_para_dict.get(file_type_list[i].lower(), 0), # 根據(jù)文件類型獲取對(duì)應(yīng)的參數(shù)值,若不存在則返回0 "name": v, "status": random.choice(['true', 'false']), # 隨機(jī)狀態(tài)參數(shù) "file_url": file_url_head + file_list[i] # 拼接文件url } for i, v in enumerate(file_name_list)] # 文件信息批量上傳 for i in file_msg_li: try: res = requests.post(url=server_url, json=i) res.raise_for_status() return res.json() except requests.exceptions.HTTPError as err: return err except requests.exceptions.Timeout as err: return err if __name__ == "__main__": path = 'C:\\Users\\Administrator\\Desktop\\test_file' url_head = 'https://your_file_head_url/' # 云存儲(chǔ)地址 host = "http://your_server_url" file_msg_to_server(path, url_head, host)
到此這篇關(guān)于Python批量上傳文件信息到服務(wù)器的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python批量上傳文件信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 利用郵件系統(tǒng)完成遠(yuǎn)程控制電腦的實(shí)現(xiàn)(關(guān)機(jī)、重啟等)
這篇文章主要介紹了Python 利用郵件系統(tǒng)完成遠(yuǎn)程控制電腦(關(guān)機(jī)、重啟等),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Python ATM功能實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python ATM功能實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03pandas數(shù)據(jù)的合并與拼接的實(shí)現(xiàn)
Pandas包的merge、join、concat方法可以完成數(shù)據(jù)的合并和拼接,本文主要介紹了這三種實(shí)現(xiàn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Python新版極驗(yàn)驗(yàn)證碼識(shí)別驗(yàn)證碼教程詳解
這篇文章主要介紹了Python新版極驗(yàn)驗(yàn)證碼識(shí)別驗(yàn)證碼,極驗(yàn)驗(yàn)證是一種在計(jì)算機(jī)領(lǐng)域用于區(qū)分自然人和機(jī)器人的,通過(guò)簡(jiǎn)單集成的方式,為開發(fā)者提供安全、便捷的云端驗(yàn)證服務(wù)2023-02-02python實(shí)現(xiàn)飛機(jī)大戰(zhàn)項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)飛機(jī)大戰(zhàn)項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03pydantic?resolve解決嵌套數(shù)據(jù)結(jié)構(gòu)生成痛點(diǎn)分析
這篇文章主要為大家介紹了pydantic?resolve解決嵌套數(shù)據(jù)結(jié)構(gòu)生成痛點(diǎn)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04