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 08 Python
Python的gevent框架的入门教程
Apr 29 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
Python实现自动上京东抢手机
Feb 06 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
Python 的AES加密与解密实现
Jul 09 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
python 获取剪切板内容的两种方法
Nov 28 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 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
Sony CFR 320 修复改造
2020/03/14 无线电
PHP截取中文字符串的问题
2006/07/12 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
python开发之thread线程基础实例入门
2015/11/11 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
如何利用python 读取配置文件
2021/01/06 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
学生自我鉴定范文
2013/10/04 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
行为习惯主题班会
2015/08/14 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers