Как получить пути до всех папок, существующих на компьютере

Пишу скрипт для автозапуска UPX(упрощенного запуска для обычных пользователей). Столкнулся с проблемой: мне нужно получить пути на все папки, существующие на дисках, чтобы после этого все exe файлы в них обработать через upx. На данный момент код выглядит так:

import glob
import os

print(
    '  __    __  .______   ___   ___         _______.  ______    _______ .___________.\n',
    '|  |  |  | |   _  \  \  \ /  /        /       | /  __  \  |   ____||           |\n',
    '|  |  |  | |  |_)  |  \  V  /        |   (----`|  |  |  | |  |__   `---|  |----`\n',
    '|  |  |  | |   ___/    >   <          \   \    |  |  |  | |   __|      |  |     \n',
    "|  `--'  | |  |       /  .  \     .----)   |   |  `--'  | |  |         |  |     \n",
    ' \______/  | _|      /__/ \__\    |_______/     \______/  |__|         |__|     \n'
    )

path = input('Введите путь для упаковки exe по нему: ')
targetPattern = rf"{path}\*.exe"
print(glob.glob(targetPattern))

for soft in glob.glob(targetPattern):
    os.system(f'title UPX Soft by httpshotmaker')
    os.system(f'upx --best "{soft}"')
    try:
        os.system('clear')
    except:
        os.system('cls')

Как видно, в приведенном мною коде путь в папку всего один, а нужно сделать автопоиск и сохранение найденного в массиве, чтобы в цикле for кода он обрабатывался

Итоговый код: import glob import os from win32api import GetLogicalDriveStrings from os import walk

os.system(f'title UPX Soft by httpshotmaker')

print(
    '  __    __  .______   ___   ___         _______.  ______    _______ .___________.\n',
    '|  |  |  | |   _  \  \  \ /  /        /       | /  __  \  |   ____||           |\n',
    '|  |  |  | |  |_)  |  \  V  /        |   (----`|  |  |  | |  |__   `---|  |----`\n',
    '|  |  |  | |   ___/    >   <          \   \    |  |  |  | |   __|      |  |     \n',
    "|  `--'  | |  |       /  .  \     .----)   |   |  `--'  | |  |         |  |     \n",
    ' \______/  | _|      /__/ \__\    |_______/     \______/  |__|         |__|     \n'
    )

path = [root for drive in GetLogicalDriveStrings().split('\000')[:-1] for root, _, _ in walk(drive)]
targetPattern = rf"{path}\*.exe"

for soft in glob.glob(targetPattern):
    os.system(f'upx --best "{soft}"')
    try:
        os.system('clear')
    except:
        os.system('cls')

Нынешняя проблема: чудовищная нагрузка на диски при запуске, нужно ее снизить


Ответы (1 шт):

Автор решения: Kuchizu

Мне нужно получить пути на все папки, существующие на дисках

from os import walk
roots = [root for root, _, _ in walk('D:/')]

Нужно прогнать не один диск, а получить и прогнать все

from os import walk
from win32api import GetLogicalDriveStrings

roots = [root for drive in GetLogicalDriveStrings().split('\000')[:-1] for root, _, _ in walk(drive)]
print(roots)
→ Ссылка