вторник, 13 февраля 2018 г.

list_azkports.py

Аналог "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)
»

Комментариев нет:

Архив