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代码来解图片迷宫的方法整理
Apr 02 Python
Python中使用dom模块生成XML文件示例
Apr 05 Python
使用python实现生成用户信息
Mar 20 Python
Python中模块与包有相同名字的处理方法
May 05 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
python random从集合中随机选择元素的方法
Jan 23 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
python plotly绘制直方图实例详解
Jul 22 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
python学习之panda数据分析核心支持库
May 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
php中并发读写文件冲突的解决方案
2013/10/25 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
php浏览历史记录的方法
2015/03/10 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
微信小程序轮播图swiper代码详解
2020/12/01 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
Python列表append和+的区别浅析
2015/02/02 Python
详解Python绘图Turtle库
2019/10/12 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
捐款倡议书范文
2014/02/02 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
Log4j.properties配置及其使用
2021/08/02 Java/Android
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang