Python上传文件到百度网盘(二)之文件切割

2023-05-16

前言

继续上文提到的使用Python上传文件到百度网盘的伟大事业。

接口分析

上文我们完成了百度网盘上传的api的封装,通过分析api我得出,需要完成上传4m以上的文件的话,是需要分片上传滴,具体如下图

 包括预先上传中的block_list,不用怀疑,这个就是分片文件的md5

 文件拆分

以上我们不难看出,放在我们面前必须要做的事情是:文件拆分+md5计算

撸代码

MD5:

# -*- coding: UTF-8 -*-
import hashlib
import os



def get_files_md5(dir_path):
    paths = []
    md5s = []
    for file_name in os.listdir(dir_path):
        path = os.path.join(dir_path, file_name)
        if not os.path.isdir(path) and not file_name.startswith('.'):
            md5 = get_file_md5(path)
            paths.append(path)
            md5s.append(md5)
    return paths, md5s



def get_file_md5(file_name):
    m = hashlib.md5()  # 创建md5对象
    with open(file_name, 'rb') as fobj:
        while True:
            data = fobj.read(4096)
            if not data:
                break
            m.update(data)  # 更新md5对象
    return m.hexdigest()  # 返回md5对象


def get_slice_md5(file_name):
    m = hashlib.md5()
    with open(file_name, 'rb') as fobj:
        data = fobj.read(256 * 1024)
        m.update(data)
    return m.hexdigest()


def get_str_md5(content):
    m = hashlib.md5(content)  # 创建md5对象
    return m.hexdigest()

上面展示的是所有文件会使用到的md5的解析,包括这个:

预上传中的头部校验位,别问我为什么要这个参数,问就是我要快传。

湿滴,百度网盘根据你传入的md5和头部校验位来确定,对应的文件是否在云盘中有记录,有的话,直接把这个文件给到你。你就不需要上传了,所谓快传,就是我有哈,你不用传了。

# -*- coding: UTF-8 -*-
import os

kilobytes = 1024
megabytes = kilobytes * 1000
chunksize = int(200 * megabytes)  # default chunksize


def split(fromfile, todir, chunksize=chunksize):
    if not os.path.exists(todir):  # check whether todir exists or not
        os.mkdir(todir)
    else:
        for fname in os.listdir(todir):
            os.remove(os.path.join(todir, fname))
    paths = []
    partnum = 0
    inputfile = open(fromfile, 'rb')  # open the fromfile
    file_name = os.path.basename(fromfile)
    while True:
        chunk = inputfile.read(chunksize)
        if not chunk:  # check the chunk is empty
            break
        partnum += 1
        filename = os.path.join(todir, ('%s.part%04d' % (file_name, partnum)))
        paths.append(filename)
        fileobj = open(filename, 'wb')  # make partfile
        fileobj.write(chunk)  # write data into partfile
        fileobj.close()
    return paths

 上面是拆分文件的代码,没啥技巧,就是循环读,写,简单的一批,当然如果你有兴趣,可以用线程去改写,但是相信我,你上传文件的瓶颈绝对不会在这,除非你在电信/联通/移动总部,哈哈~~~

总结

好啦好啦,要上班撸代码了,下次再说哈。预告一下,下次和大家聊一聊怎么下载一个m3u8的视频。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python上传文件到百度网盘(二)之文件切割 的相关文章

  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解

随机推荐

  • 竞品分析十大维度

    一 市场现状 行业现状 xff08 200 300字 xff09 1 以行业的全局进行分析 xff0c 市场的容量 xff0c 市场的发展前景 2 目前市场上的行情是怎么样的 xff1f 哪些是直接竞品 xff0c 哪些是间接竞品 xff1
  • 一个程序员的回忆录

    要么庸俗 xff0c 要么孤独 要么庸俗 xff0c 要么孤独 叔本华 今天是一个特殊的时间 xff0c 一个国庆和中秋在同一天的时间 特殊的时间总会回想起一些事情 xff0c 当事情可以用文章来表达的时候 xff0c 我便不再孤单 xff
  • My_Admin 独立系统开发第一节

    项目介绍 My Admin 项目后台该后台采用Tp5 43 layuimini 研发 xff0c 系统呢是准备研发一个垃圾回收小程序 垃圾回收小程序是结合市场需求开发的一个集运营与跑男端的垃圾回收小程序 目的是企业可以通过招募跑男 xff0
  • uni-app快速入门开发一个项目

    hello 大家好 xff0c 我是老张 xff0c 有的人称呼我为张工 一个不务正业的PHP开发者 xff0c 立志于做一个全栈开发工程师 今天呢 xff0c 我想补充一章关于uni app 如何开发 xff0c 如何建立项目 xff0c
  • uni-app开发知识付费系统个人中心界面

    hello 大家好 xff0c 我是老张 xff0c 那个不务正业的PHP开发工程师 今天是我使用uni app开发在线教育系统的第三天了 xff0c 今天主要开发了底部菜单的 xff0c 学习页面 xff0c 个人中心页面 xff0c 先
  • 阿里云负载均衡的配置和使用场景

    解释下什么叫做负载均衡 负载均衡 xff0c 英文名称为Load Balance xff0c 其含义就是指将负载 xff08 工作任务 xff09 进行平衡 分摊到多个操作单元上进行运行 xff0c 例如FTP服务器 Web服务器 企业核心
  • phpstudy下的nginx服务器显示目录

    在linux下配置Nginx的目录显示 linux下的基本命令 cd 切换目录 ls 查看目录 找到你的phpstudy的环境 cd 进入环境你会看到如下图一样所示的图片 cd server 使用 ls查看你会得到如图所示 cd nginx
  • 我与AI的相识

    AI人工智能 xff0c 作为一名程序员竟然不懂AI xff0c 好吧 xff01 我就是不懂 xff0c 最开始是听老师在帮助我们分析自己所学的专业行情时 xff0c 老师提到了AI xff0c 这时我是懵逼的状态什么是AI xff0c
  • <PHP 输出九九乘法表 for循环 递归>《正三角》《倒三角》

    lt php header 34 content type text html charset 61 utf 8 34 九九乘法表 正三角 64 var integer for i 61 1 i lt 61 9 i 43 43 for j
  • TP5+七牛云文件上传

    利用七牛云作为图片服务器来使用 xff0c 为什么使用七牛云 xff0c 使用七牛云的好处有很多 xff0c 节省自己的服务器空间 xff0c 七牛云的使用方便 xff0c 便宜 好了下面就说下TP5使用七牛云进行文件上传 第一步 xff0
  • 七牛云图片的预览

    上一个博客写了如何将本地图片上传到七牛云 xff0c 那么问题来了 xff0c 上传完毕后 xff0c 我们怎么才能在本地进行展示查看呢 xff1f 按照我们以前的思路那就是 xff0c 七牛云的域名 43 图片的名字 xff0c 但是呢
  • 时间序列预测比赛小结

    一 时间序列基础 1 什么是时间序列 xff1f 表面上 xff0c 时间序列就是按照时间的先后顺序排列的一串数值数学意义上 xff0c 时间序列是一串随机变量 2 研究时间序列的目的 xff1f 点预测区间预测 3 什么样子的时间序列可预
  • Ubuntu下使用ECM上网介绍

    1 背景 为了验证展锐原厂的USB CDC EMC xff08 Ethernet Control Model xff09 驱动的上网功能 xff0c 需要搭建Linux系统 现将整个流程整理如下 2 环境搭建 安装虚拟机 VMware wo
  • 如何将本地代码上传到远程库main分支中

    1 本地代码上传到github 1 1 首先修改默认分支 在2020年10月1起 xff0c github默认主分支从master更名为main xff0c 以上提交方式会默认创建一个master分支 xff0c 为保持一致性 xff0c
  • 如何在putty终端上打开图形化管理工具

    有时候需要在putty这样的图形终端中打开图形化的管理工具会出现下面的错误 xff1a root 64 node2 Traceback most recent call last File 34 usr share virt manager
  • IMU/光电鼠标/轮式编码器的多传感器融合(非线性卡尔曼滤波)

    各传感器分析 imu 对于平面移动机器人 xff08 如扫地机器人 xff09 xff0c IMU只需要一般只需要使用陀螺仪的偏航角 xff08 YAW xff09 xff0c 陀螺仪的偏航角有时间漂移的误差存在 xff0c 一般分为系统漂
  • IMU/电子罗盘/轮式编码器的多传感器融合(非线性卡尔曼滤波)

    传感器分析 电子罗盘 xff08 Compass magnetometer xff09 对于平面运动机器人而言 xff0c 只需要xy平面上的数据即可求出来绝对角度 xff0c 这里电子罗盘需要做椭圆 gt 圆的传感器标定 电子罗盘上车的标
  • kalibr使用笔记

    官网 GitHub ethz asl kalibr The Kalibr visual inertial calibration toolbox The Kalibr visual inertial calibration toolbox
  • Python上传文件到百度网盘(一)

    前言 最近由于突发奇想要下载某网站电影 xff0c 当然资源也是爬来的 xff0c 然后是一堆M3u8格式的URL xff0c 为了保证防止资源后续失效的情况 xff0c 打算先下载下来 xff0c 然后加密压缩 xff08 xff5e x
  • Python上传文件到百度网盘(二)之文件切割

    前言 继续上文提到的使用Python上传文件到百度网盘的伟大事业 接口分析 上文我们完成了百度网盘上传的api的封装 xff0c 通过分析api我得出 xff0c 需要完成上传4m以上的文件的话 xff0c 是需要分片上传滴 xff0c 具