Как получить пути до всех папок, существующих на компьютере
Пишу скрипт для автозапуска 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 шт):
Мне нужно получить пути на все папки, существующие на дисках
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)