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 相关文章推荐
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
python 接口返回的json字符串实例
Mar 27 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
利用python如何处理nc数据详解
May 23 Python
Linux下python制作名片示例
Jul 20 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
Python操作redis和mongoDB的方法
Dec 19 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
python 字符串格式化的示例
Sep 21 Python
Python爬取梨视频的示例
Jan 29 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
PHP 裁剪图片
2021/03/09 PHP
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
python实现图片批量剪切示例
2014/03/25 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
Linux如何压缩可执行文件
2014/03/27 面试题
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
医院护士的求职信范文
2013/12/26 职场文书
媒体宣传策划方案
2014/05/25 职场文书
疾病防治方案
2014/05/31 职场文书
2015年药店工作总结
2015/04/20 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
python缺失值填充方法示例代码
2022/12/24 Python