最后有全部代码,可直接复制拿走运行

先看最终效果
白色字体为文件夹 黑色字体为文件 可以点击实现展开和折叠

生成网页html形式的百度网盘可折叠目录树教程—超详细

  • 前言
  • 正文
    • 需要的软件及环境
    • 使用教程
      • 1. 登录百度网盘客户端 获得db文件
      • 2. 确定文件夹名称!极其重要!
      • 3.生成目录树
  • 全部代码
  • 其他
  • 代码引用说明

前言

目的主要是想让其他人知道自己网盘内有什么文件,但是又不想让其他人直接下载、查看文件内容。
在面向百度编程时发现目前存在的方法只有三种
一、通过读取百度网盘db文件生成txt文件的目录结构,对于文件多的生成后达到了上万行!反而更麻烦了

二、通过百度网盘开放平台 申请接入后 接口可以实现全部的网盘功能 但是对于只想看个目录的我来说又过于繁琐
三、某些网站提供收费制作的服务 虽然符合但是资金又是问题

最后只能在第一种的基础上进行延展
原效果展示

只需要简单改动 把前面的┃ ┃━等符号替换为html中的ul li 开始标签
并根据当前文件/文件夹与上个文件/文件夹的所在文件层来添加对应的结束标签即可

正文

需要的软件及环境

  1. 百度网盘客户端
    用于获取本地缓存的BaiduYunCacheFileV0.db文件
  2. python 环境
    用于执行代码

使用教程

1. 登录百度网盘客户端 获得db文件

DB文件在 百度网盘安装目录\users\用户编码\BaiduYunCacheFileV0.db
例:D:\Install\BaiduNetdisk\users\6042e993975f952575a94cf405cb69a4\BaiduYunCacheFileV0.db

2. 确定文件夹名称!极其重要!

打开百度网盘在右上角搜索 等

因为百度网盘会出现《期末作业.mp4等多个文件》这种命名的文件夹
由于需要根据文件或文件夹添加不同的结束标签,此类文件夹命名会被认为是文件,从而导致最后的目录树被打乱
需要将文件夹名称中的.mp4删除,同理文件夹名称中含有mp3 word pdf 等文件后缀名时,也需要删除掉
例:期末作业.mp4等多个文件 修改为 期末作业等多个文件

3.生成目录树

运行python代码出现下方窗体

DB文件就是刚刚找到的文件地址 选中即可

保存地址 不用多说

点击生成后会在保存地址 生成两份文件

html直接打开即为最终效果 适合小白或要求不高者 拿到就可以使用了
html文件中css和js都是添加好的

txt文件内为生成好的html标签,可以根据自己内容进行二次开发功能
注:在将生成好的html标签复制到html中时需要手动添加一对ul标签 在ul标签中粘贴生成好的html标签
例:

<body>
<ul>
<!--在此处粘贴生成好的html标签-->
</ul>
</body>

txt文件内容

全部代码

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfilename
from tkinter.ttk import *
import sqlite3
import osfiletype_pre = "" # 上一个文件类型
items_pre = 1     # 上一个文件/文件夹所在目录层数
gaps=""           # 总层数def select_db_file():db_file = askopenfilename(title="请选择BaiduYunCacheFileV0.db文件", filetypes=[('db', '*.db')])db.set(db_file)def select_save_file():save_file = asksaveasfilename(filetypes=[('文件', '*.txt')])f.set(save_file+".txt")
def txtTOhtml(path):'''param txt文件路径\n将生成好的html标签写入为html文件'''base=["<html><head><meta charset='UTF-8'><style> body { margin: 0; background-color: rgb(156, 215, 217); } p { color: aliceblue; } ul { list-style: none; } ul li ul { display: none; } #box1 { flex: 3; } .zk { display: block; } </style><script src='https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js'></script></head><body><div id='box1'><ul><!-- 目录树开始 -->\n","\n<!-- 目录树结束 --></ul></div><script> $('li').click(function (event) { obj = $(this).children('ul'); if (!obj.hasClass('zk')) { siblings = $(this).siblings().children('ul'); if (siblings.hasClass('zk')) { siblings.removeClass('zk'); }; $(obj).addClass('zk'); } else { $(obj).removeClass('zk'); }; event.stopPropagation(); }); </script></body></html>"
]pathportion = os.path.splitext(path)    # 分离文件名与扩展名scratchFile=pathportion[0]+".html"      # 拼接html文件名#向html文件写入f = open(scratchFile,'w',encoding='utf-8')  with open(path,'r',encoding='utf-8') as fa: Readeddata = fa.readlines()            f.write(base[0])    #写入html固定头for x in Readeddata:#写入生成的html标签f.write(x) f.write(base[1])    #写入html固定尾f.close()def html_tails(gaps):'''param gaps  最后的层\nreturn html 文档末尾的标签'''html_tails=""for i in range(gaps.count("┃")):html_tails=html_tails+"</li></ul>"return html_tailsdef htmltxt(filetype_pre, filetypes, item_vary):'''获得对应的html标签\nparam filetype_pre  上个文件类型\nparam filetypes     当前文件类型\nparam item_vary     层数差'''html = {"<li><p>":  "<li><p>",  # 文件夹头"</p>":  "</p>",  # 文件夹尾"<li>": "<li>",  # 文件头"</li>": "</li>",  # 文件尾/"<ul>": "<ul>","</ul></li>": "</ul></li>","</li></ul></li>": "</li></ul></li>"}html_txt = ""       #当前文件与上个文件之间的结束标签html_head = ""      #文件/文件夹头标签html_tail = ""     #文件/文件夹尾标签#True为文件夹  False为文件if (filetype_pre == ""):  # 上个文件类型=空return html["<li><p>"], html["</p>"]if (filetypes == True):  # 当前文件类型=文件夹html_head = html["<li><p>"]html_tail = html["</p>"]else:html_head = html["<li>"]html_tail = html["</li>"]if (filetype_pre == True):  # 上个文件类型=文件夹if(item_vary==0):html_txt=html["</li>"]elif(item_vary==1):html_txt=html["<ul>"]elif(item_vary<0):for i in range(abs(item_vary)):html_txt=html_txt+html["</li></ul></li>"]if(filetype_pre==False):    #上个文件类型=文件if(item_vary==0):html_txt=""else:for i in range(abs(item_vary)): #按层数依次补充html_txt=html_txt+html["</ul></li>"]return html_txt+html_head, html_taildef file_type(filename):'''判断文件是 文件夹True 还是 文件False'''types = [".mp4", ".mp3", ".ts", ".pdf", ".docx", ".ppt", ".ppts", ".doc", ".7z", ".zip", ".xlsx", ".jpeg",".jpg", ".png", ".heic", ".mov", "3gp", "aac", "ace", "aif", "arj", "asf", "avi", "bin", "bz2", "exe", "gz", "gzip", "img", "iso", "lzh", "m4a", "m4v", "mkv", "mpa", "mpe", "mpeg", "mpg", "msi", "msu", "ogg", "ogv", "pdf", "plj", "pps", "qt", "ra", "rar", "rm", "rmvb", "sea", "sit", "sitx", "tar", "tif", "tiff", "wav", "wma", "wmv", "apk", "m3u8", "apks", "apkm"
]if "." in filename:for i in types:if i in filename:return Falsefor i in types:if i.upper() in filename:return Falsereturn Truedef filetype(filename, item):'''param filename  文件名\nparam item      当前目录\n返回文件前后html标签\nreturn 前标签,后标签'''#True为文件夹  False为文件global filetype_pre         # 上个文件类型filetypes = True            # 当前文件类型# 判断当前文件类型filetypes = file_type(filename)global items_pre                # 上个文件所在目录层数items = item.count('/')         # 当前文件所在目录层数item_vary = items-items_pre     # 当前目录与上个目录 层数变化html_head = ""html_tail = ""html_head,html_tail=htmltxt(filetype_pre,filetypes,item_vary)filetype_pre = filetypes    # 更新上个文件类型items_pre = items           # 更新上个文件所在目录层数return html_head, html_taildef write_file(file_dict, f, item, gap=""):'''向txt写入'''global gapsif item == "/":for i in file_dict["/"]:html_head,html_tail=filetype(i,"/")f.write(html_head+ i + html_tail+"\n")i = item + i + "/"if i in file_dict:write_file(file_dict, f, i, gap="┃  ")else:gap = "┃  " + gapfor i in file_dict[item]:if(i==""):print(item)html_head,html_tail=filetype(i,item)f.write(html_head+ i + html_tail+"\n")gaps=""gaps=gapi = item + i + "/"if i in file_dict:write_file(file_dict, f, i, gap)def create_baiduyun_filelist():file_dict = {}conn = sqlite3.connect(db.get())cursor = conn.cursor()cursor.execute("select * from cache_file")while True:value = cursor.fetchone()if not value:break#路径path = value[2]#文件名name = value[3]#大小size = value[4]isdir = value[6]if path not in file_dict:file_dict[path] = []file_dict[path].append(name)else:file_dict[path].append(name)with open(f.get(), "w", encoding='utf-8') as fp:write_file(file_dict, fp, "/")global gapsfp.write(html_tails(gaps))txtTOhtml(fp.name)root = Tk()
root.title('百度云文件列表生成工具')
db_select = Button(root, text=' 选择DB文件 ', command=select_db_file)
db_select.grid(row=1, column=1, sticky=W, padx=(2, 0), pady=(2, 0))
db = StringVar()
db_path = Entry(root, width=80, textvariable=db)
db_path['state'] = 'readonly'
db_path.grid(row=1, column=2, padx=3, pady=3, sticky=W+E)
save_path = Button(root, text='选择保存地址', command=select_save_file)
save_path.grid(row=2, column=1, sticky=W, padx=(2, 0), pady=(2, 0))
f = StringVar()
file_path = Entry(root, width=80, textvariable=f)
file_path['state'] = 'readonly'
file_path.grid(row=2, column=2, padx=3, pady=3, sticky=W+E)
create_btn = Button(root, text='生成文件列表', command=create_baiduyun_filelist)
create_btn.grid(row=3, column=1, columnspan=2, pady=(0, 2))
root.columnconfigure(2, weight=1)
root.mainloop()

其他

目前没发现有其他原因导致目录树被打乱,如果你按照教程操作后依旧没成功可以留言反馈。

代码引用说明

由于此类文章在网络上被营销号大量转发导致不清楚原作者是哪位
本人参考是站内 中了毒蛇粉的猫 发布在2021-07-14的 批量获取百度网盘文件目录 的文章,并在此基础上做的修改。

生成百度网盘可折叠目录树教程 百度网盘html可折叠目录树相关推荐

  1. mysql 网盘_Mysql 免安装教程 百度云网盘有文件和word说明

    一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 新建->变量值是解 ...

  2. 制作u盘启动linux安装教程,制作u盘启动linux安装教程

    制作u盘启动linux安装教程 [2021-02-14 17:02:30]  简介: 服务器 Linux或者OS X系统中,使用"dd"命令可以直接在终端命令行模式下,制作ISO镜 ...

  3. 联想服务器u盘安装win7系统安装教程,联想笔记本U盘重装win7系统步骤详细图文教程...

    联想是国人的骄傲,很多国内的朋友使用的都是联想品牌的笔记本电脑或者台式电脑.当电脑系统卡或者运行不流畅的时候就要考虑重装系统了.下面是学习啦小编跟大家分享的是联想笔记本U盘重装win7系统步骤详细图文 ...

  4. u盘服务器安装win7系统安装教程,服务器u盘安装win7系统

    服务器u盘安装win7系统 内容精选 换一换 本文操作介绍使用Linux操作系统的HECS(云耀云服务器)安装宝塔面板.宝塔面板是一款使用方便.功能强大且终身免费的服务器管理软件,支持Linux与Wi ...

  5. php百度自动推送代码,怎么设置百度自动推送代码安装教程-百度自动推送好处解析...

    网站设置自动推送可以大幅提高搜索引擎的抓取效率进而提高网站收录率,是SEO中非常重要的一个操作.博主今天以百度搜索引擎为例详细介绍各类网站添加百度自动推送的方法. 注意一点: 自动提交只有在网页被加载 ...

  6. 用U盘安装系统完全教程

    用U盘安装系统完全教程 用U盘安装系统完全教程详细介绍如下: 最近很多朋友为怎么用U盘装系统,为此,97深度www.97shendu.cn专门为大家制作了一篇教程.先说一下:把光盘上的GHOST(IS ...

  7. 机械革命无法使用U盘启动linux,uefi启动u盘启动不了,机械革命笔记本一键u盘启动bios设置教程...

    综上所述便是机械革命笔记本一键u盘启动bios设置教程的全部内容了,相信通过小编几个简单步骤的解析,相信朋友都了解了吧!完成上述操作后,便可以为自己的电脑用一键优盘安装系统了. 使用教程 视频教程 纯 ...

  8. WordPress 百度熊掌号快速开发改造教程

    WordPress 百度熊掌号快速开发改造教程 百度熊掌号的接入方式有两种,一种是 H5 页面改造,一种是 MIP 页面改造.其中 H5 页面并非只是 html5 页面,而是指移动端页面,简而言之就是 ...

  9. miix5 u盘安装linux,联想Miix510U盘装系统win10教程

    联想Miix510从配置上来看,最高可以选择intel i7处理器.8GB运行存储以及512GB SSD,不俗的设计加上出色的配置,简单.干脆,直击消费者要害.但关于这款笔记本,大家知道它如何重装系统 ...

最新文章

  1. mysql bind param_为什么bindParam必须要指定类型?
  2. python为什么用linux_为何Python在Windows下使用比Linux下更方便
  3. Head First JSP---随笔二
  4. 粒子群(PSO)算法简介
  5. upper_bound()与lower_bound函数的使用
  6. Lucene分类统计示例
  7. 多线程中堆和栈区别的深入解析
  8. tsql是mysql中的吗_Mysql中的sql是如何执行的
  9. HBase的RowKey设计
  10. LitePal(版本1.5.0,写此博客时是最新版本)
  11. 189. Rotate Array
  12. Opencv drawContours函数用于绘制和填充
  13. Flask学习(二)-Jinji2模板引擎
  14. 实训4——RFID刷卡开锁
  15. sybase客户端SqlDbx中文乱码问题解决
  16. Type -C 耳机
  17. AutoJs学习-自动抢单学习
  18. C语言绕过杀毒软件,易语言插件规避杀毒软件方法
  19. poj Best Cow Line
  20. html markdown 互相转换,Vue/Vue中Html和Markdown互相转换/README.md · 撒欢大魔王/LearningNotes - Gitee.com...

热门文章

  1. 用晚餐瘦身是最好的方法
  2. 我玩辅助是在给你做视野,不是给你的坟头看风水
  3. android渲染是skia与egl,opengl和skia哪个快 游戏电脑问题解决分享!
  4. node、express框架
  5. 一位计算机硕士毕业生三个月求职经历与经验的结晶
  6. 物联网控制原理与技术--基于Matlab/利用MATLAB进行频域分析(伯德图)的应用(超详细/设计/实验/作业/练习)
  7. doc转pdf java不失真,java doc转PDF
  8. [MSSQL]双重游标的使用以及动态游标的使用
  9. 剑指offer——矩阵覆盖
  10. 中国软件领域院士及其成就