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解析xml模块封装代码
Feb 07 Python
详解Python的单元测试
Apr 28 Python
一文总结学习Python的14张思维导图
Oct 17 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
Django工程的分层结构详解
Jul 18 Python
10个Python面试常问的问题(小结)
Nov 20 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
python开发前景如何
Jun 11 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
Django URL参数Template反向解析
Nov 24 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获得当前的脚本网址
2007/12/10 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
javascript getElementsByClassName实现代码
2010/10/11 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
2013/11/26 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
初识Node.js
2015/03/20 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
python中MySQLdb模块用法实例
2014/11/10 Python
Python如何实现文本转语音
2016/08/08 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
家长会演讲稿
2014/04/26 职场文书
银行求职信范文
2014/05/26 职场文书
超市创意活动方案
2014/08/15 职场文书
课外活动总结
2015/02/04 职场文书
项目建议书
2015/02/04 职场文书
毕业证明模板
2015/06/19 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书