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 相关文章推荐
Python的IDEL增加清屏功能实例
Jun 19 Python
python中模块查找的原理与方法详解
Aug 11 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Python button选取本地图片并显示的实例
Jun 13 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
Python 解析简单的XML数据
Jul 24 Python
Django中和时区相关的安全问题详解
Oct 12 Python
Python基础之元编程知识总结
May 23 Python
Python中如何处理常见报错
Jan 18 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
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
php把数组值转换成键的方法
2015/07/13 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
python字典快速保存于读取的方法
2018/03/23 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
Python获取时间戳代码实例
2019/09/24 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
python读取mysql数据绘制条形图
2020/03/25 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Python的两道面试题
2013/06/29 面试题
优秀团支部事迹材料
2014/02/08 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL