前言

信息/文件存储的重要性不言而喻,一般放在网盘。可视化界面的网盘,可以让我们清晰看见和分清目录层级。

但有时候我们想导出特定文件的目录(层级),发现并没有现成的解决方案。

(比如百度网盘就无法实现这个效果)

我通过写提示词,问了AI相关方法,并结合代码(python),做了一个提取并保存目录的案例。

这里和大家分享实现过程。

一、提问和AI回答

1、提示词

我的百度网盘中的文件有很多子文件夹,我想快捷提取(导出)这些文件的命名,生成一个索引,可以如何实现?

2、AI回答

一共三种,我只试了第一种,其他两种自行尝试

2.1、方案一

  • 使用百度网盘 PC 客户端和 Navicat Premium
    • 找到数据库文件:右键点击百度云客户端快捷方式,选择 “打开文件位置(XP 不适用)”,或点属性查看快捷方式目标,一般在 “C:\Users\Administrator\AppData\Roaming\baidu\BaiduYunGuanjia\” 位置。打开后进入 user 目录,再打开那个一长串的文件夹,找到 “BaiduYunCacheFileV0.db” 文件,这个文件存放着网盘的详细信息。
    • 连接数据库:打开 Navicat Premium,点击连接,选择 SQLite,在常规选项中选择现有数据库文件,浏览并选择刚才找到的 “BaiduYunCacheFileV0.db” 文件,点击 “连接测试”,显示 “连接成功” 后点击确定回到主界面。
    • 查看并导出数据:双击建立的百度云管家数据库,出现 main,再双击 main,点开表,双击 cache_file 表,这里面是网盘上的所有目录结构信息,其中 parent_path 是路径,server_filename 是文件名。点击导出按钮,可以选择全部导出或导出自己需要的部分。

2.2、方案二 

  • 使用网页版百度网盘
    • 登录并进入设置:打开百度网盘网页版,登录账号后,在页面右上角找到 “我的” 选项,点击进入个人中心,然后找到 “设置” 选项并点击进入。
    • 选择导出格式并导出:在设置页面中找到 “导出” 选项,选择导出为 HTML 格式,并点击开始按钮开始导出。等待一段时间后,导出的 HTML 文件就会保存在指定位置,该文件包含了百度网盘的目录结构信息,可从中提取文件命名。

2.3、方案三 

  • 使用第三方工具 mybaiduexport.exe6
    • 运行程序:双击运行 mybaiduexport.exe 程序。
    • 选择文件与保存地址:程序启动后,选择 DB 文件,即 “BaiduYunCacheFileV0.db” 文件的位置,默认在百度网盘安装目录下的 /users 文件夹中。然后选择一个保存地址,用于保存导出的文件列表。
    • 设置相关参数并生成:设置 “要导出的文件的深度”,即希望导出的目录层级深度。点击 “生成文件列表” 按钮后,程序将解析 DB 文件,提取出百度网盘上的文件列表信息,并保存到指定路径。

3、常用的筛选

  • 按特定字段值筛选
    • 打开表和筛选界面:打开数据库,双击打开需要查询的表,点击 “筛选” 按钮,出现筛选选项。
    • 选择筛选字段:点击 “按这里添加”,从下拉菜单中选择需要查询的字段。
    • 设置筛选条件:点击 “包含”,从下拉菜单中选择查询条件,如 “等于”“不等于”“大于”“小于”“包含”“不包含” 等。然后在输入框中输入需要查询的具体值,点击右下角的 “应用” 按钮,最后按 F5 刷新,即可显示筛选后的数据。
  • 按多个条件筛选
    • 添加多个筛选条件:按照上述按特定字段值筛选的步骤,先添加一个筛选条件。若还需添加其他条件,可再次点击 “按这里添加”,继续选择字段和设置条件。多个条件之间默认是 “与” 的关系,即同时满足多个条件的数据才会被筛选出来。
    • 调整条件逻辑关系:如果需要改变条件之间的逻辑关系,如 “或” 关系,可以点击筛选条件之间的 “与”“或” 按钮进行切换。
  • 按日期范围筛选
    • 选择日期字段:在 “按这里添加” 的下拉菜单中选择日期类型的字段。
    • 设置日期范围:点击 “包含”,选择 “在范围内” 或 “不在范围内” 等条件。然后在弹出的日期选择器中选择起始日期和结束日期,点击 “应用” 并按 F5 刷新,即可筛选出指定日期范围内的数据。
  • 按空值或非空值筛选
    • 选择字段:点击 “按这里添加”,选择要筛选的字段。
    • 设置筛选条件:点击 “包含”,选择 “为空” 或 “不为空” 条件,点击 “应用” 并按 F5 刷新,可筛选出该字段为空值或非空值的数据。

本次案例使用的软件是Navicat Premium 

“筛选-条件书写、增加条件-应用 "

二、结合代码

1、提示词

先不管筛选条件,如果我想将方法1的使用情况用编程快速且方便实现,推荐用哪个编程语言,以及告诉我如何实现。

2、AI回答

import sqlite3
import csv


def generate_baidu_cloud_index(db_path, output_path):
    try:
        # 连接到 SQLite 数据库
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()

        # 查询文件信息
        query = "SELECT parent_path, server_filename FROM cache_file"
        cursor.execute(query)
        rows = cursor.fetchall()

        # 保存结果到 CSV 文件
        with open(output_path, 'w', newline='', encoding='utf-8') as csvfile:
            writer = csv.writer(csvfile)
            # 写入表头
            writer.writerow(['parent_path', 'server_filename'])
            # 写入数据
            writer.writerows(rows)

        print(f"索引文件已成功保存到 {output_path}")
    except sqlite3.Error as e:
        print(f"数据库操作出错: {e}")
    except Exception as e:
        print(f"发生未知错误: {e}")
    finally:
        if conn:
            conn.close()


if __name__ == "__main__":
    # 替换为实际的数据库文件路径
    db_file_path = "C:\\Users\\Administrator\\AppData\\Roaming\\baidu\\BaiduYunGuanjia\\user\\your_folder\\BaiduYunCacheFileV0.db"
    # 替换为你想要保存索引文件的路径
    output_file_path = "baidu_cloud_index.csv"
    generate_baidu_cloud_index(db_file_path, output_file_path)
    

3、一些优化

一开始AI给出的代码,文件的位置以及输出文件的位置是写死的,需要自己手动在代码中改写。这次简化成让用户自行自行输入(并且保留保存的默认位置)

3.1、提示词

做一些优化,进入程序的时候先提示用户输入实际的百度网盘数据库文件路径,然后再提示输入保存索引文件的路径(如果不输入则默认保存在桌面上)。

3.2、AI回答

import sqlite3
import csv
import os


def generate_baidu_cloud_index(db_path, output_path):
    try:
        # 连接到 SQLite 数据库
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()

        # 查询文件信息
        query = "SELECT parent_path, server_filename FROM cache_file"
        cursor.execute(query)
        rows = cursor.fetchall()

        # 保存结果到 CSV 文件
        with open(output_path, 'w', newline='', encoding='utf-8') as csvfile:
            writer = csv.writer(csvfile)
            # 写入表头
            writer.writerow(['parent_path', 'server_filename'])
            # 写入数据
            writer.writerows(rows)

        print(f"索引文件已成功保存到 {output_path}")
    except sqlite3.Error as e:
        print(f"数据库操作出错: {e}")
    except Exception as e:
        print(f"发生未知错误: {e}")
    finally:
        if conn:
            conn.close()


if __name__ == "__main__":
    # 提示用户输入百度网盘数据库文件路径
    db_file_path = input("请输入百度网盘数据库文件(BaiduYunCacheFileV0.db)的路径: ")

    # 提示用户输入保存索引文件的路径
    output_file_path = input("请输入要保存索引文件的路径(留空则默认保存到桌面): ")
    if not output_file_path:
        # 获取桌面路径
        desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
        output_file_path = os.path.join(desktop_path, "baidu_cloud_index.csv")

    generate_baidu_cloud_index(db_file_path, output_file_path)
    

3.3、一些提示(点到为止)

优化可能存在的问题

  • 编码问题(乱码)
  • 筛选功能(根据上述思路,写提示词让AI生成,然后自行调试)

三、效果演示

PS:我做的版本增加了筛选功能。

打开生成后的csv文件。 

四、常见问题

  • 运行程序的python版本? 

-python3 

  • 百度网盘数据库文件(BaiduYunCacheFileV0.db)的路径

前面的AI回答中有答案,自行查找。

  • 对路径名的输入有什么要求?

有多级目录就以“/子文件夹”的形式补充

比如这是你的网盘目录

  • 你想查找25考研的英语学习的文件

那么你就输入:25考研/英语学习

  • 如果你想查找编程文件夹下的文件

那么你就输入:编程 

五、总结

案例就到此结束了,欢迎提问和交流。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐