Python批量上傳文件信息到服務(wù)器的實現(xiàn)示例
一、背景
在進行軟件測試的過程中,經(jīng)常會需要準備一批數(shù)據(jù),這不,今天就遇到了:后端開發(fā)好了文件信息上傳接口,可是前端并未開發(fā)出相關(guān)界面,而其他同學(xué)正在調(diào)試其他接口,需要用到文件信息,那么這個時候就需要我上場了
簡而言之就是需要通過接口上傳一批文件信息到服務(wù)器
二、準備工作
1.Python環(huán)境:家中常備,這個就不多說了
2.requests第三方庫:用于向服務(wù)器發(fā)送請求,未安裝的同學(xué)移步控制臺輸入以下命令
pip install requests
3.源文件:將不同類型的文件(excel、word、pdf)放到一個文件夾下
4.文件云存儲地址:文件已經(jīng)批量上傳到了云服務(wù)器,文件云存儲地址示例:https://your_file_head_url/file_name.pdf
5.上傳接口:從接口文檔查看接口地址、傳參、響應(yīng)等,沒有接口文檔的情況請同學(xué)們另辟蹊徑
三、編寫腳本
獲取文件名和類型
源文件夾是這樣的:

源文件名稱是正常的,不包含“.”
源文件后綴也是正常的,與文件類型匹配
這里簡單快速處理,使用split方法通過“.”將文件分割出名稱和文件類型
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)運行結(jié)果:

拼接文件信息
根據(jù)接口文檔,上傳的文件信息需要包含類型、名稱、狀態(tài)、url四個參數(shù),這就需要對每個文件信息進行拼接
這里使用了enumerate函數(shù)來遍歷文件名列表,可以枚舉出列表的下標和值,灰常好用
注意:文件類型存在大寫字母的情況(PDF,DOC等),所以使用lower函數(shù)將文件名轉(zhuǎn)換為小寫后再判斷對應(yīng)的參數(shù)值
# 拼接文件信息
file_url_head = 'https://your_file_head_url/' # 云存儲地址
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']), # 隨機狀態(tài)參數(shù)
"file_url": file_url_head + file_list[i] # 拼接文件url
}
file_msg_li.append(file_msg)
pprint(file_msg_li)運行結(jié)果:

文件信息批量上傳
使用requests.post方法請求接口即可
# 文件信息批量上傳
for i in file_msg_li:
res = requests.post(url=server_url, json=i)
print(res.json())運行結(jié)果:
下面是控制臺打印的接口請求返回結(jié)果:

下圖是數(shù)據(jù)庫的查詢結(jié)果:

四、優(yōu)化
1.寫到一個方法中,傳入文件路徑和地址等參數(shù)
2.使用列表推導(dǎo)式簡化代碼
3.文件類型列表改為字典,根據(jù)類型快速查找對應(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ù)文件類型獲取對應(yīng)的參數(shù)值,若不存在則返回0
"name": v,
"status": random.choice(['true', 'false']), # 隨機狀態(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/' # 云存儲地址
host = "http://your_server_url"
file_msg_to_server(path, url_head, host)到此這篇關(guān)于Python批量上傳文件信息到服務(wù)器的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python批量上傳文件信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python調(diào)用ffmpeg命令行工具便捷操作視頻示例實現(xiàn)過程
現(xiàn)在短視頻很流行,有很多視頻編輯軟件,功能豐富,而我們需要的只是裁剪功能,而且需要用編程的方式調(diào)用,那么最合適的莫過于ffmpeg了2021-11-11
tensorflow 用矩陣運算替換for循環(huán) 用tf.tile而不寫for的方法
今天小編就為大家分享一篇tensorflow 用矩陣運算替換for循環(huán) 用tf.tile而不寫for的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
python批量處理多DNS多域名的nslookup解析實現(xiàn)
這篇文章主要介紹了python批量處理多DNS多域名的nslookup解析實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Python多進程方式抓取基金網(wǎng)站內(nèi)容的方法分析
這篇文章主要介紹了Python多進程方式抓取基金網(wǎng)站內(nèi)容的方法,結(jié)合實例形式分析了Python多進程抓取網(wǎng)站內(nèi)容相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2019-06-06

