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  连接字符串(join %)
Sep 06 Python
深入理解Python分布式爬虫原理
Nov 23 Python
如何利用python查找电脑文件
Apr 27 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
python调用自定义函数的实例操作
Jun 26 Python
Python实现FTP文件传输的实例
Jul 07 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
在python中使用nohup命令说明
Apr 16 Python
Pytorch环境搭建与基本语法
Jun 03 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 Python
Django+Django-Celery+Celery的整合实战
Jan 20 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的session功能评述(一)
2006/10/09 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
Jquery iframe内部出滚动条
2010/02/11 Javascript
javascript cookies操作集合
2010/04/12 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
学习python的几条建议分享
2013/02/10 Python
python爬虫基本知识
2018/03/05 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
python字符串反转的四种方法详解
2019/12/02 Python
java字符串格式化输出实例讲解
2021/01/06 Python
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
暑期社会实践方案
2014/02/05 职场文书
先进党员事迹材料
2014/12/24 职场文书
卫生主题班会
2015/08/14 职场文书
优质服务标语口号
2015/12/26 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
利用python做数据拟合详情
2021/11/17 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers