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设计模式之策略模式
Nov 18 Python
MySQL适配器PyMySQL详解
Sep 20 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
python中pip的安装与使用教程
Aug 10 Python
python如何实现一个刷网页小程序
Nov 27 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
Python爬虫实现验证码登录代码实例
May 10 Python
详解Python是如何实现issubclass的
Jul 24 Python
python字符串替换re.sub()方法解析
Sep 18 Python
python numpy库np.percentile用法说明
Jun 08 Python
导致python中import错误的原因是什么
Jul 01 Python
python分分钟绘制精美地图海报
Feb 15 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
法压式咖啡之制作法
2021/03/03 冲泡冲煮
CodeIgniter框架URL路由总结
2014/09/03 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
python局域网ip扫描示例分享
2014/04/03 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
python能做哪些生活有趣的事情
2020/09/09 Python
如何用Python 加密文件
2020/09/10 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
梅西百货官网:Macy’s
2020/08/04 全球购物
生产部主管岗位职责
2014/01/06 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
公司建议书怎么写
2014/05/15 职场文书
新学期开学标语
2014/06/30 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
期末个人总结范文
2015/02/13 职场文书
2016年班主任新年寄语
2015/08/18 职场文书