iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >用Python的requests库实现自动上传文件
  • 134
分享到

用Python的requests库实现自动上传文件

python开发语言 2023-09-09 11:09:38 134人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

女朋友下班后听她吐槽自己领导安排了一件又要让她加班的工作。大致任务是:在公司网址上为近10万客户上传签订的合同的基础信息并上传对应的资料附件。月底前必须完成,人工一天才传了1000左右,按这个节奏根本

女朋友下班后听她吐槽自己领导安排了一件又要让她加班的工作。大致任务是:在公司网址上为近10万客户上传签订的合同的基础信息并上传对应的资料附件。月底前必须完成,人工一天才传了1000左右,按这个节奏根本完不成。
为了不让她加班,这边写了一个小脚本来实现自动上传。
思路:抓取对应上传资料接口,分析出接口入参,通过读取excel里的数据,用python的requests库来调用接口传入实现。

准备工作

  1. 需安装Python的requests、xlrd库
pip install requestspip install xlrd==1.2.0 # xlrd2.0.1版本以后不支持.xlsx格式
  1. 附件和客户资料汇总文档(已有,只需按接口上传格式整理下即可)

一、整理接口文档(F12或fiddler工具

使用F12开发者工具或者fiddler工具(fiddler使用教程)抓取接口的URL、请求头、入参、出参
在这里插入图片描述

通过入参格式可以看出
在这里插入图片描述

根据抓取的接口信息把需上传的信息整理成对应文档格式
在这里插入图片描述

二、编写脚本

1. 通过xlrd读取Excel

读取Excel数据,以标题作为字典的key,按每行数据拼接出入参数据,
返回格式[{“a”:“a值”,…},{“a”:“a值”,…},…]方便后续传参读取。

    def get_data(self, file):        """        读取Excel数据,以标题作为字典的key,按每行数据拼接出入参数据,        返回格式[{"a":"a值",....},{"a":"a值",....},....]        :param file: 文档        :return: [{"a":"a值",....},{"a":"a值",....},....]        """        e = xlrd.open_workbook(file)        sheet = e.sheet_by_index(0)        lists = []        key = sheet.row_values(0)        for i in range(1, sheet.nrows):            value = sheet.row_values(i)            dic = {}            for j in range(sheet.ncols):                dic[key[j]] = value[j]            lists.append(dic)        return lists

2.读取Excel数据的附件名,判断对应路径是否存在对应附件。

判断是否对应附件存在,存在就返回:实际附件路径和附件名,否则返回:null

    def get_file(self, files, path):        """         通过附件名查看是否附件存在        :param files: 附件名        :param path: 附件存放路径        :return: 附件路径dirpath, 附件名flie_name        """        dirpath, flie_name = '', ''        for dirpath, dirs, filenames in os.walk(path):            for v in range(len(filenames)):                if filenames[v].find(files) != -1:                    flie_name = filenames[v]                    break                else:                    flie_name = 'null'        return dirpath, flie_name

3.编写调用上传接口

循环获取Excel文档里的参数,作为请求入参的data,读取附件内容并上传。
注意点:
①附件格式传入对应类型是不同的:jpg、jpeg、pdf、doc、docx、zip、rar
②如果接口需要cookie的获取、cookie有效期

if ext == '.jpg':    file_type = 'image/jpeg'elif ext == '.jpeg':    file_type = 'image/jpeg'elif ext == '.pdf':    file_type = 'application/pdf'elif ext == '.doc':    file_type = 'application/msWord'elif ext == '.docx':    file_type = 'application/vnd.openxmlfORMats-officedocument.wordprocessingml.document'elif ext == '.zip':    file_type = 'application/x-zip-compressed'elif ext == '.rar':    file_type = 'application/octet-stream'

循环执行上传,最后判断下接口结果,并记录日志

    def execute_api(self, url, file, path, cookie):        """        通过requests调用API上传附件和对应信息        :param url: 接口地址        :param file: 汇总文件名        :param path: 资料附件存放路径        :param cookie: 有效的cookie        :return:        """        lists = self.get_data(file)        for datas in lists:            custCode = datas['custCode']            files = datas['files']            del datas['files']            datas.update()            datas['classId'] = '19'            datas['sendSms'] = 'false'            datas['profileSource'] = '1'            dirpath, file_name = self.get_file(files, path)            results = ''            if file_name != 'null':                ext = os.path.splitext(file_name)[1]                if ext == '.jpg':                    file_type = 'image/jpeg'                elif ext == '.jpeg':                    file_type = 'image/jpeg'                elif ext == '.pdf':                    file_type = 'application/pdf'                elif ext == '.doc':                    file_type = 'application/msword'                elif ext == '.docx':                    file_type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'                elif ext == '.zip':                    file_type = 'application/x-zip-compressed'                elif ext == '.rar':                    file_type = 'application/octet-stream'                else:                    file_type = ''                file_path = dirpath + file_name                headers = {                    'Cookie': cookie}                result = self.s.post(url=url, data=datas, files={                    "files": (file_name, open(file_path, "rb"), file_type)},         headers=headers)                results = result.text            else:                results = "文件不存在"                with open('err_log.txt', 'a', encoding='utf-8') as f:                    f.write(f'{custCode}' + ',' + results + '\n')            ex = '"success":true'            if ex in results:                r = f'{custCode}:上传成功'            else:                r = f'{custCode}:上传失败'            print(r + ',' + results)            with open('log.txt', 'a', encoding='utf-8') as f:                f.write(r + '\n')

全部源码代码

# -*- coding: utf-8 -*-import osimport requestsimport xlrdclass Test:    def __init__(self):        self.s = requests.session()    def get_data(self, file):        """        读取Excel数据,以标题作为字典的key,按每行数据拼接出入参数据,        返回格式[{"a":"a值",....},{"a":"a值",....},....]        :param file: 文档        :return: [{"a":"a值",....},{"a":"a值",....},....]        """        e = xlrd.open_workbook(file)        sheet = e.sheet_by_index(0)        lists = []        key = sheet.row_values(0)        for i in range(1, sheet.nrows):            value = sheet.row_values(i)            dic = {}            for j in range(sheet.ncols):                dic[key[j]] = value[j]            lists.append(dic)        return lists    def get_file(self, files, path):        """         通过附件名查看是否附件存在        :param files: 附件名        :param path: 附件存放路径        :return: 附件路径dirpath, 附件名flie_name        """        dirpath, flie_name = '', ''        for dirpath, dirs, filenames in os.walk(path):            for v in range(len(filenames)):                if filenames[v].find(files) != -1:                    flie_name = filenames[v]                    break                else:                    flie_name = 'null'        return dirpath, flie_name    def execute_api(self, url, file, path, cookie):        """        通过requests调用API上传附件和对应信息        :param url: 接口地址        :param file: 汇总文件名        :param path: 资料附件存放路径        :param cookie: 有效的cookie        :return:        """        lists = self.get_data(file)        for datas in lists:            custCode = datas['custCode']            files = datas['files']            del datas['files']            datas.update()            datas['classId'] = '19'            datas['sendSms'] = 'false'            datas['profileSource'] = '1'            dirpath, file_name = self.get_file(files, path)            results = ''            if file_name != 'null':                ext = os.path.splitext(file_name)[1]                if ext == '.jpg':                    file_type = 'image/jpeg'                elif ext == '.jpeg':                    file_type = 'image/jpeg'                elif ext == '.pdf':                    file_type = 'application/pdf'                elif ext == '.doc':                    file_type = 'application/msword'                elif ext == '.docx':                    file_type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'                elif ext == '.zip':                    file_type = 'application/x-zip-compressed'                elif ext == '.rar':                    file_type = 'application/octet-stream'                else:                    file_type = ''                file_path = dirpath + file_name                headers = {                    'Cookie': cookie}                result = self.s.post(url=url, data=datas, files={                    "files": (file_name, open(file_path, "rb"), file_type)},         headers=headers)                results = result.text            else:                results = "文件不存在"                with open('err_log.txt', 'a', encoding='utf-8') as f:                    f.write(f'{custCode}' + ',' + results + '\n')            ex = '"success":true'            if ex in results:                r = f'{custCode}:上传成功'            else:                r = f'{custCode}:上传失败'            # print(r + ',' + results)            with open('log.txt', 'a', encoding='utf-8') as f:                f.write(r + '\n')    def write_log(self, r):        """        记录接口调用日志        :param r:        :return:        """        with open('log.txt', 'a', encoding='utf-8') as f:            f.write(r + '\n')if __name__ == '__main__':    t = Test()    # 上传文件接口地址    url = ''    # 合同提供资料汇总文件名    file = '提供资料模板.xlsx'    # 有效的cookie    cookie = ''    # 资料附件存放路径    path = r"D:\Projects\test\files\\"    t.execute_api(url, file, path, cookie)

最后,替换真实的URL、填充模板内容、cookie、附件存放路径,执行脚本,等待执行结束就行啦。

来源地址:https://blog.csdn.net/weixin_46157924/article/details/131347179

--结束END--

本文标题: 用Python的requests库实现自动上传文件

本文链接: https://www.lsjlt.com/news/401334.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 用Python的requests库实现自动上传文件
    女朋友下班后听她吐槽自己领导安排了一件又要让她加班的工作。大致任务是:在公司网址上为近10万客户上传签订的合同的基础信息并上传对应的资料附件。月底前必须完成,人工一天才传了1000左右,按这个节奏根本...
    99+
    2023-09-09
    python 开发语言
  • python 使用第三方库requests-toolbelt 上传文件流的示例
    python 使用第三方库requests-toolbelt 上传文件流,内容如下所示: # pip install requests-toolbelt 使用第三方库上传文件流 f...
    99+
    2022-11-11
  • Python实现自动上传文件到百度网盘
    目录1.准备2.授权bypy访问百度网盘3.开始使用bypy4.文件上传功能5.文件同步功能要使用Python自动上传文件到百度网盘,你可以使用bypy开源模块,它提供了丰富的功能,...
    99+
    2023-05-17
    Python上传文件到百度网盘 Python上传文件到网盘 Python上传文件
  • python requests完成接口文件上传的案例
    最近在准备一个公开课,主题就是利用不同的语言和不同的工具去实现文件的上传和下载。 在利用Jmeter去实现功能的时候,以及利用loadrunner去写脚本的时候,都很顺利,没有任何问...
    99+
    2022-11-11
  • 怎么用python requests实现上传excel数据流
    本篇内容主要讲解“怎么用python requests实现上传excel数据流”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用python requests实现上传exc...
    99+
    2023-06-29
  • Python+django实现文件上传
    1、文件上传(input标签) (1)html代码(form表单用post方法提交) <input class="btn btn-primary col-md-1" style="margin:...
    99+
    2022-06-04
    文件上传 Python django
  • Python利用fastapi实现上传文件
    目录使用File实现文件上传使用UploadFile实现文件上传UploadFile的属性设置上传文件是可选的上传多个文件知识点补充使用File实现文件上传 使用Form表单上传文件...
    99+
    2022-11-11
  • python使用requests提交post请求并上传文件(multipart/form-data)
    目录 一、背景 二、请求接口上传文件         2.1、分析接口         2.2、python进行请求 三、总结 一、背景         也是前几天,有一个需求上传文件需要自动化。具体是上传到系统一个文件,并收到返...
    99+
    2023-09-04
    python 爬虫
  • Python接口自动化之文件上传/下载接口怎么实现
    今天小编给大家分享一下Python接口自动化之文件上传/下载接口怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。〇、前...
    99+
    2023-06-29
  • Python+django实现简单的文件上传
    今天分享一下Django实现的简单的文件上传的小例子。 步骤 •创建Django项目,创建Django应用 •设计模型 •处理urls.py 以及views.py ...
    99+
    2022-06-04
    文件上传 简单 Python
  • python+django快速实现文件上传
    对于web开来说,用户登陆、注册、文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说就没办法一步一步的操作练习;对于web应用...
    99+
    2022-06-04
    文件上传 快速 python
  • Python怎么实现上传Minio文件
    本篇内容介绍了“Python怎么实现上传Minio文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!环境依赖安装minio以及oss2依赖p...
    99+
    2023-06-25
  • python+requests+pytest接口自动化的实现示例
    目录1、发送get请求2、发送post请求3、发送https请求4、文件上传5、文件下载6、timeout超时7、鉴权 7.1、auth参数鉴权7.2、session操作7.3、to...
    99+
    2022-11-12
  • fastadmin上传文件回调和实现自定义批量上传
    文章目录 前言一、上传回调二、批量上传总结 前言 Fastadmin是基于thinkphp5得一个快速开发开源框架,在市面上很流行,里边自定义了上传文件得方法,只需要简单调用即可使用...
    99+
    2023-09-01
    javascript html php
  • Javaselenium上传文件的实现
    目录下载和安装AutoIt1.打开AutoIt的官网下载下载和安装AutoIt 文件上传是自动化中棘手的部分,目前selenium并没有提供上传的实现api,所以知道借助外力来完成,...
    99+
    2022-11-13
  • AjaxFileUpload如何实现单个文件的Ajax文件上传库
    这篇文章将为大家详细讲解有关AjaxFileUpload如何实现单个文件的Ajax文件上传库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery.AjaxFileU...
    99+
    2022-10-19
  • python+selenium的web自动化上传操作的实现
    目录一、关于上传操作二、input标签三、第三方库pywin32四、第三方工具pyautogui总结一、关于上传操作 上传有两种情况: 如果是input可以直接输入路径的,那么直接使...
    99+
    2022-11-11
  • Python实现不写硬盘上传文件
    目录引言文本类型二进制类型使用 requests 把字符串按照文件上传引言 你写了一个 api,接受 client 上传的文件,然后在上传到 oss,你会怎么做?先写硬盘,然后在上传...
    99+
    2022-11-11
  • Python实现FTP上传文件或文件夹实例(递归)
    本文实例讲述了Python实现FTP上传文件或文件夹实例。分享给大家供大家参考。具体如下: import sys import os import json from ftplib import...
    99+
    2022-06-04
    递归 文件夹 上传文件
  • 使用AJAX实现上传文件
    本文实例为大家分享了使用AJAX实现上传文件的具体代码,供大家参考,具体内容如下 需求: 在前端页面选择文件上传到服务器的指定位置 前端代码 <form id="upl...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作