查找下一级文件夹的文件
Find a file 1 folder level down
我正在尝试使用 Python OS 模块获取 '%APPDATA%\Mozilla\Firefox\Profiles\<random_folder>\places.sqlite'
中存在的 places.sqlite
个文件中的 full_path 个。如您所见,问题 <random_folder>
的名称是随机的,并且 Profiles
文件夹中可能有多个文件夹。
如何 navigate/find places.sqlite
文件的路径?
使用os
模块列出%APPDATA%\Mozilla\Firefox\Profiles\
中的所有目录
遍历目录直到找到 places.sqlite 文件(也使用 os 模块)
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))
A 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:
# ....
我正在尝试使用 Python OS 模块获取 '%APPDATA%\Mozilla\Firefox\Profiles\<random_folder>\places.sqlite'
中存在的 places.sqlite
个文件中的 full_path 个。如您所见,问题 <random_folder>
的名称是随机的,并且 Profiles
文件夹中可能有多个文件夹。
如何 navigate/find places.sqlite
文件的路径?
使用os
模块列出%APPDATA%\Mozilla\Firefox\Profiles\
遍历目录直到找到 places.sqlite 文件(也使用 os 模块)
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))
A 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:
# ....