#python #python-3.x #os.path
#python #python-3.x #os.path
Вопрос:
Я пытаюсь получить places.sqlite
полный путь к файлу, присутствующему при '%APPDATA%MozillaFirefoxProfiles<random_folder>places.sqlite'
использовании модуля Python OS. Проблема, как вы можете видеть, <random_folder>
имеет случайное имя, и внутри папки может быть несколько Profiles
папок.
Как мне перейти / найти путь к places.sqlite
файлу?
Ответ №1:
В идеале вы хотели бы просмотреть каждую папку для поиска этого файла. В терминале команда ‘locate file_name’ сделает это за вас. В файле python вы можете использовать следующую команду:
import os
db_path = os.path.join(os.getenv('APPDATA'), r'MozillaFirefoxProfiles')
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))
Ответ №2:
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
Ответ №3:
Используйте os
модуль для перечисления всех каталогов в %APPDATA%MozillaFirefoxProfiles
перебирайте каталоги, пока не найдете файл places.sqlite (также с использованием модуля os)
Комментарии:
1. Для этого есть встроенная функция.
os.walk()
Ответ №4:
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:
# ....