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实现监控windows服务并自动启动服务示例
Apr 17 Python
python利用装饰器进行运算的实例分析
Aug 04 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
python实现简易通讯录修改版
Mar 13 Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 Python
python 将list转成字符串,中间用符号分隔的方法
Oct 23 Python
python的继承知识点总结
Dec 10 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
python实现会员管理系统
Mar 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
php内核解析:PHP中的哈希表
2014/01/30 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
冰淇淋店的创业计划书
2014/02/07 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
毕业生工作求职信
2014/06/30 职场文书
商铺门面租房协议书
2014/10/21 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2015年林业工作总结
2015/05/14 职场文书
敬老院活动感想
2015/08/07 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
Python 内置函数速查表一览
2021/06/02 Python