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之玩转字符串(2)更新篇
Sep 28 Python
Python求解平方根的方法
Mar 11 Python
深入理解Python变量与常量
Jun 02 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
Python发展简史 Python来历
May 14 Python
python实现实时视频流播放代码实例
Jan 11 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
python与js主要区别点总结
Sep 13 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
Python自动化测试基础必备知识点总结
Feb 07 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
如何删除多级目录
2006/10/09 PHP
用ODBC的分页显示
2006/10/09 PHP
开发大型 PHP 项目的方法
2007/01/02 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Python中几种导入模块的方式总结
2017/04/27 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
python类的实例化问题解决
2019/08/31 Python
python怎么提高计算速度
2020/06/11 Python
秘书专业自荐信范文
2013/12/26 职场文书
房地产销售经理岗位职责
2014/01/01 职场文书
学校万圣节活动方案
2014/02/13 职场文书
高二学生评语大全
2014/04/25 职场文书
初中学习计划书范文
2014/09/15 职场文书
申报优秀教师材料
2014/12/16 职场文书
行政介绍信范文
2015/05/04 职场文书
企业工会工作总结2015
2015/05/13 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
基于Python实现股票收益率分析
2022/04/02 Python
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis