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通过文件头判断文件类型
Oct 30 Python
Python如何import文件夹下的文件(实现方法)
Jan 24 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
python实现猜数字游戏
Mar 25 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
python加载自定义词典实例
Dec 06 Python
python3 pathlib库Path类方法总结
Dec 26 Python
python实现输入三角形边长自动作图求面积案例
Apr 12 Python
Python如何读写字节数据
Aug 05 Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 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中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
java必学必会之static关键字
2015/12/03 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
举例讲解Python中装饰器的用法
2015/04/27 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
python英语单词测试小程序代码实例
2019/09/09 Python
浅析python内置模块collections
2019/11/15 Python
Python的几种主动结束程序方式
2019/11/22 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
python 如何区分return和yield
2020/09/22 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
交通法规咨询中心工作职责
2013/11/27 职场文书
股东协议书
2014/04/14 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
工作失职检讨书范文
2015/05/05 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
海洋天堂观后感
2015/06/05 职场文书
初中语文教学随笔
2015/08/15 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS
vue ref如何获取子组件属性值
2022/03/31 Vue.js