python 实现百度网盘非会员上传超过500个文件的方法


Posted in Python onJanuary 07, 2021

案例故事:

百度网盘非会员大量上传文件,会弹出:“上传文件数量超出500个现在,开通超级会员后可继续上传”,其实是限制拖入500张相片,并非限制上传500张。

python 实现百度网盘非会员上传超过500个文件的方法

非会员如何将众多文件,分割成500一个的文件夹,不受拖入数量限制呢?

准备阶段

  • os.walk()函数,可以树形遍历整个路径下的文件夹列表和文件列表
  • Path(路径).parent属性,可以获取该“路径”的父路径
  • os.path.relpath("D:\aaa\bbb\ccc",start="D:\aaa")函数,可以返回“bbb\ccc”字符串, 实现路径裁剪。
  • os.sep 可以代表任何路径分隔符
  • os.rename()函数,可以实现移动功能
  • sys.argv[1] 通过接收“待分割的路径”参数的输入

Python面向对象类形式

# python3.8
# coding=utf-8
 
import os
import sys
from pathlib import Path
 
 
class BaiduPanCutter(object):
  '''百度网盘500个文件分割器'''
 
  def __init__(self, root_path, count=500):
    self.root_path = root_path
    self.count = count
    self.folder_file_dict = {} # 文件夹与其文件列表的映射字典
    self.get_folders_files() # 获取该根路径下的所有文件夹列表和文件列表
 
  def get_folders_files(self):
    '''获取该根路径下的所有文件夹列表和文件列表'''
    for folders, _, files in os.walk(self.root_path):
      self.folder_file_dict[folders] = files
 
  def _split(self, arr, count):
    '''分割文件列表,每500算一份'''
    arrs = []
    while len(arr) > count:
      piece = arr[:count]
      arrs.append(piece)
      arr = arr[count:]
    arrs.append(arr)
    return arrs
 
  # 分割文件并放到新的文件去
  def cut_file(self):
    '''分割并移动到新的文件夹'''
    for each_folder in self.folder_file_dict.keys():
      num = 1 # 以500为倍数,这是1倍
 
      # 将文件路径(摒弃当前路径)转成字符串,用_隔开
      temp_path = os.path.relpath(each_folder, Path(self.root_path).parent)
      temp_path = temp_path.replace(os.sep, "_")
      print(temp_path)
 
      files_list = self.folder_file_dict[each_folder]
      file_group = self._split(files_list, self.count) # 按500来分割
 
      if len(file_group) > 1: # 有超过500个的文件列表
        for each_group in file_group: # 遍历每500份的文件列表
          new_folder = os.path.join(self.root_path, temp_path + "_" + str(num)) # 新路径
          if not os.path.exists(new_folder):
            os.mkdir(new_folder)
          for each_file in each_group:
            old_file = os.path.join(each_folder, each_file)
            new_file = os.path.join(new_folder, each_file)
            print("正在将%s 移动到 %s" % (old_file, new_file))
            os.rename(old_file, new_file)
          num = num + 1
      else: # 无超过500个的文件列表
        new_folder = os.path.join(self.root_path, temp_path) # 新路径
        if not os.path.exists(new_folder):
          os.mkdir(new_folder)
        for each_file in file_group[0]: #
          old_file = os.path.join(each_folder, each_file)
          new_file = os.path.join(new_folder, each_file)
          print("正在将%s 移动到 %s" % (old_file, new_file))
          os.rename(old_file, new_file)
 
 
if __name__ == '__main__':
  try:
    arg1 = sys.argv[1]
    if os.path.isdir(arg1):
      b_obj = BaiduPanCutter(arg1, 500)
      b_obj.cut_file()
    else:
      print("非文件夹,运行方法:python %s 路径文件夹" % sys.argv[0])
  except IndexError:
    print("未输入待分割的路径文件夹, 运行方法:python %s 路径文件夹" % sys.argv[0])
  os.system("pause")

运行方式与效果

运行方式:将以上代码命名为:baidu_pan_500_cutter.py
通过命令:python baidu_pan_500_cutter.py D:\DCIM\Photos 运行

python 实现百度网盘非会员上传超过500个文件的方法

每个文件夹都不会超过500个文件,后续将一个一个的文件夹拖入百度网盘(电脑客户端)即可了。

备注信息

  • 本脚本不涉及任何的删除文件或文件夹的操作,不会出现文件丢失情况。
  • 兼容非英文的文件夹或文件分割操作。

以上就是python 实现百度网盘非会员上传超过500个文件的详细内容,更多关于python 百度网盘上传超过500个文件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
pytorch 数据集图片显示方法
Jul 26 Python
python设定并获取socket超时时间的方法
Jan 12 Python
Python动态语言与鸭子类型详解
Jul 01 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
python多线程扫描端口(线程池)
Sep 04 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 Python
Python flask路由间传递变量实例详解
Jun 03 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 Python
Django权限控制的使用
Jan 07 #Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 #Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 #Python
jupyter notebook更换皮肤主题的实现
Jan 07 #Python
基于 Python 实践感知器分类算法
Jan 07 #Python
如何编写python的daemon程序
Jan 07 #Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 #Python
You might like
一个php作的文本留言本的例子(六)
2006/10/09 PHP
详解:――如何将图片储存在数据库里
2006/12/05 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
PHP反射API示例分享
2016/10/08 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
python实现图片文件批量重命名
2020/03/23 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
python实现AdaBoost算法的示例
2020/10/03 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
软件毕业生个人鉴定
2014/03/03 职场文书
股份转让协议书
2014/04/12 职场文书
五好家庭申报材料
2014/12/20 职场文书
小学老师对学生的评语
2014/12/29 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
Python OpenCV形态学运算示例详解
2022/04/07 Python