查找 1 个文件夹级别下的文件

问题描述

我正在尝试使用 Python 操作系统模块获取 places.sqlite 中存在的 '%APPDATA%\Mozilla\Firefox\Profiles\<random_folder>\places.sqlite' 文件的完整路径。如您所见,<random_folder> 的名称是随机的,Profiles 文件夹中可能有多个文件夹。

如何导航/找到 places.sqlite 文件的路径?

解决方法

os.walk 以递归方式给出路径中所有文件的列表。使用它来搜索 'places.sqlite',如下所示。

path = ""
for root,dirs,files in os.walk("%APPDATA%\\Mozilla\\Firefox\\Profiles\\"):
    if "places.sqlite" in files:
        path = os.path.join(root,'places.sqlite')
        break
,

理想情况下,您希望通过每个文件夹来搜索此文件。在终端 'locate file_name' 命令会为你做这件事。在 python 文件中,您可以使用以下命令:

import os


db_path = os.path.join(os.getenv('APPDATA'),r'Mozilla\Firefox\Profiles')


def find_file(file_name,path):
    for root_folder,directory,file_names in os.walk(path):
        if file_name in file_names:
            return os.path.join(root_folder,file_name)


print(find_file('places.sqlite',db_path))
,

使用 os 模块列出 %APPDATA%\Mozilla\Firefox\Profiles\ 中的所有目录

遍历目录直到找到places.sqlite文件(也使用os模块)

,

glob 可能更简单,因为在这种情况下,人们希望文件位于 Profiles 文件夹之下的级别,或者根本不存在。


import os
import pathlib

profiles = pathlib.Path(os.environ["APPDATA"]) / "Mozilla" / "Firefox" / "Profiles"
# rglob will recursively search as well
if places := list(profiles.rglob("places.sqlite")):
    print(places[0]) # will print the sqllite file path
    with places[0].open() as f:
        # ....

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...