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 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
解读Django框架中的低层次缓存API
Jul 24 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
python获取Pandas列名的几种方法
Aug 07 Python
Python程序控制语句用法实例分析
Jan 14 Python
python实现翻译word表格小程序
Feb 27 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 Python
python实现KNN近邻算法
Dec 30 Python
Python采集壁纸并实现炫轮播
Apr 30 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 PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
javascript判断office版本示例
2014/04/11 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
React组件的三种写法总结
2017/01/12 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
javascript绘制简单钟表效果
2020/04/07 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
优秀员工推荐材料
2014/12/20 职场文书
骨干教师考核评语
2014/12/31 职场文书
奖学金感谢信
2015/01/21 职场文书
街道社区活动报告
2015/02/05 职场文书
汉字听写大会观后感
2015/06/12 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书