Аналог
"azk_dir_port_listing.bat", только на Python3.
Отступы важны!
«
#22.04.2018 18:17 IRKT (изменен)
#13.02.2018 00:32 IRKT (создан)
#d.aryshtaev@bftcom.com
#Из названия папки, которая дожна быть именована в соответствии с форматом: <Версия АЦК>_<СУБД>_<порт СП>_<произвольный текст>
#утилита извлекает значение паттерна <порт СП> и сохраняет его в переменной s_port.
#Например, из названия папки "2.43.0.166e_FB_21013_BOD_170914" извлекает "21013".
import os, time, collections, sys, webbrowser
#Инициализация списков:
ls_port=[]
ls_port_ok=[]
ls_port_bad=[]
ls_port_dupl=[]
ls_port_ix = 0
ls_port_ok_ix = 0
ls_port_bad_ix = 0
ls_port_dupl_ix = 0
#Обработка папок:
ddirs = [d for d in os.listdir('.') if os.path.isdir(d)]
for d in ddirs:
s_port = d[d.find("_",d.find("_")+1)+1:d.find("_",d.find("_",d.find("_")+1)+1)]
try:
i_port = int(s_port)
ls_port_ix = ls_port_ix + 1
ls_port.insert(ls_port_ix, i_port)
except ValueError:
ls_port_bad_ix = ls_port_bad_ix + 1
ls_port_bad.insert(ls_port_bad_ix, s_port)
#Проверка списка ls_port на наличие дублей (информация о дублях заносится в список ls_port_dupl):
for tmpvar in ls_port:
if ls_port.count(tmpvar) > 1:
ls_port.remove(tmpvar)
ls_port_dupl.insert(ls_port_dupl_ix, tmpvar)
#Убираем дубли из списков
ls_port = list(set(ls_port))
ls_port_dupl = list(set(ls_port_dupl))
ls_port_bad = list(set(ls_port_bad))
#Сортировка списков:
ls_port.sort()
ls_port_bad.sort()
ls_port_dupl.sort()
#Поиск пропущенных (по порядку) портов в списке:
for tmpvar in ls_port:
ls_port_ok_ix = ls_port_ok_ix + 1
if ls_port.index(tmpvar) > 0:
if (tmpvar - ls_port[ls_port.index(tmpvar)-1]) > 1:
#Если найдены пропущенные порты, то на их место ставим пустую строку, чтобы в конечном файле их было хорошо видно, затем найденный порт и приращиваем поисковый индекс:
ls_port_ok.insert(ls_port_ok_ix, '')
ls_port_ok.insert(ls_port_ok_ix, tmpvar)
ls_port_ok_ix = ls_port_ok_ix + 1
else:
ls_port_ok.insert(ls_port_ok_ix, tmpvar)
else:
ls_port_ok.insert(ls_port_ok_ix, tmpvar)
#ls_port.insert(ls_port.index(tmpvar), 0)
#Вывод списков на экран:
#print("Все порты в названии папок:\n", ls_port, "\n")
#print("Дублирующиеся порты:\n", ls_port_dupl, "\n")
#print("Некорректные порты:\n", ls_port_bad, "\n")
#Вывод списков в файл:
filename = "azkport_listing.txt"
tmpdir=os.environ['TEMP']
filepath = os.path.join(tmpdir, filename)
ss_out = sys.stdout
f = open(filepath, 'w')
sys.stdout = f
if len(ls_port_ok) > 0:
#print("Все порты в названии папок:\n", ls_port_ok)
for tmpvar in ls_port_ok:
print(tmpvar)
if len(ls_port_dupl) > 0: print("\nДублирующиеся порты:\n", ls_port_dupl)
if len(ls_port_bad) > 0: print("\nНекорректные порты:\n", ls_port_bad)
sys.stdout = ss_out
f.close()
#Открыть файл в ассоциированном приложении:
webbrowser.open(filepath)
#time.sleep(10)
»