What's new
Runion

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

TXT MultiTool или комбайн для работы со строками в текстовых файлах

я думаю ты прав и по тупому около вайтово ссать на ветер попадая себе на лицо - хихикать над красным скрином вт достаточно выгодно и жизнеспособно
Stagex сказал(а):
Ну у меня та же версия, что и по ссылке выше, тот же детект всмысле, но них.я там нет по факту.
Нажмите, чтобы раскрыть...
 
HackLiLBITCH сказал(а):
было бы классно
сортер логинов и паролей по определенному домену)
Нажмите, чтобы раскрыть...
Что мешает воспользоваться функцией: 6. Отсортировать по доменам ?
Ну так конечно я понимаю чего ты хочешь, делать поиск по строке домена и вытягивать. Типа передаешь аргумент с доменом и алгоритм делает поиск по домену в строках вытаскивая их. Ну на это можно воспользоваться функцией извлечь Email или пароли....если у тебя лог разделен на delimiter в строках: :, |, / и т.д. А дальше уже пройтись сортером по домену в режиме на каждый домен отдельный файл. Ну хотя возможно ты и прав, если лог большой не совсем удобно это делать. Я подумаю на досуге. Может в будущем добавлю режим который будет конкретно вытаскивать только по определенному домену заданным пользователем. В общем да, мысль грамотная.
 
UPD. Version 0.9.1:
Добавлен модуль чистки строк в текстовом файле не содержащий латинские буквы, работает в 3-х режимах. Подробно описал в старт-посте.

Интерфейс работы:


P.S. Просьба потестить по возможности, на моей генерке в 2 гигабайта вроде всё работает правильно, предупреждение: не забывайте сохранять бэкапы своих файлов =)
P.S.S. Возможно надо было сделать выбор через инпут все спецсимволы которые нужно учитывать во втором режиме, но это пока черновой вариант. Пока нужно реализовать весь функционал по моему составленному ТЗ и плану, а потом доработать. Кому надо можете в строке условия модуля в функции "is_latin_line: allowed_chars += "@._-"" ввести символы которые вам нужны при отработке файла.
 
UPD. Version 0.9.2:
Добавлен функционал построчного копирования строк из текстового файла, подробности в стартовом посте. Работает в двух режимах: Полное копирование строк из файла или по выбранному диапазону.

Примеры работы:
 
Объясните плиз что в софте от Lays выполняет функция "Нормализатор баз". Что она нормализует и по какому принципу работает? Мне что-то лень виртуалку поднимать для его запуска. =)
 
rand сказал(а):
Объясните плиз что в софте от Lays выполняет функция "Нормализатор баз". Что она нормализует и по какому принципу работает? Мне что-то лень виртуалку поднимать для его запуска. =)
Нажмите, чтобы раскрыть...
Если я не ошибаюсь, то приводит базу в нужный формат (не пользовался этим софтом, сужу по Crystal Sorter). Например, у тебя база формата {log:pass:link}, а тебе нужно {link:log:pass} и т.д.
 
AGN сказал(а):
Если я не ошибаюсь, то приводит базу в нужный формат (не пользовался этим софтом, сужу по Crystal Sorter). Например, у тебя база формата {log:pass:link}, а тебе нужно {link:log:pass} и т.д.
Нажмите, чтобы раскрыть...
верно, он отсеивает все строки не подходящие под формат mail:pass, но TextUtils очень плохо нормализует, удаляет некоторые строки со спец. символами, не нужно брать с него пример
 
UPD. Version 0.9.3:
Добавлен функционал изменения кодировки файла. Подробности в стартовом посте.

Интерфейс работы:
 
UPD. Version 0.9.3.1:
HackLiLBITCH сказал(а):
было бы классно
сортер логинов и паролей по определенному домену)
Нажмите, чтобы раскрыть...
В функционал сортировки по домену добавлен режим filter_domains, указывать можно как списком через запятую так и просто указать требуемый домен для последующего экспорта. Интерфейс работы модуля:



P.S. Веду работу над нормализатором.
 
UPD. Version 0.9.4:
Добавлен функционал нормализатора строк. Работает в 4-х режимах:
  1. Форматирование строк (format) - выполняет форматирование строк в экспортируемый файл, указываете разделитель строки входящего файла и их формат к примеру "ip:mail:pass", указываете нужный формат "mail:pass:ip" на выходе волучаете отформатированные строки.
  2. Фильтрация строк по формату (filter) - указываете разделитель, и формат тех строк которые нужно вытащить из файла, например только mail:pass, на выходе получаете отфильтрованные строки из файла.
  3. Очистка строк от спецсимволов (clean) - указываете спецсимволы которые вы хотите почистить из строк, на выходе получаете файл со строками без спецсимволов указанных алгоритму.
  4. Обрезка строк по длине (trim) - указываете диапазон по какой длине отсеивать строки в экспортируемый файл, получаете файл со строками по указанному количеству символов диапазона.
Код модуля (не влез в стартовый пост):

Python: Скопировать в буфер обмена
Code:
import os
import logging
import time
from colorama import Fore

# Настройка логгера
logger = logging.getLogger(__name__)
logging.basicConfig(
 level=logging.INFO,
 format="%(asctime)s - %(levelname)s - %(message)s",
 handlers=[
  logging.StreamHandler(),
  logging.FileHandler("normalize_base.log", encoding="utf-8")
 ]
)

def normalize_lines(input_file: str, output_file: str, mode: str, delimiter: str, input_format: str = None,
      format_order: str = None, valid_format: str = None, min_len: int = None, max_len: int = None, exclude_chars: str = None):
 """
 Нормализация строк файла в зависимости от заданного режима.

 :param input_file: Путь к входному файлу
 :param output_file: Путь к выходному файлу
 :param mode: Режим работы ("format", "filter", "clean", "trim")
 :param delimiter: Разделитель строк
 :param input_format: Формат входящих строк для режима "format" (например, "log:pass:link")
 :param format_order: Новый формат для режима "format" (например, "link:log:pass")
 :param valid_format: Формат для фильтрации строк в режиме "filter" (например, "mail:pass")
 :param min_len: Минимальная длина строки для фильтрации в режиме "trim"
 :param max_len: Максимальная длина строки для фильтрации в режиме "trim"
 :param exclude_chars: Набор символов, которые нужно исключить из строки (для режима "clean")
 """
 start_time = time.time()
 processed_lines = 0
 valid_lines = 0
 logger.info(f"Начало обработки. Режим: {mode}, Входной файл: {input_file}, Выходной файл: {output_file}")

 try:
  # Проверка выходной директории
  output_dir = os.path.dirname(output_file)
  if output_dir and not os.path.exists(output_dir):
   logger.info(f"Выходная директория {output_dir} не найдена. Создаём её.")
   os.makedirs(output_dir)

  with open(input_file, 'r', encoding='utf-8', errors='replace') as infile, \
    open(output_file, 'w', encoding='utf-8', errors='replace') as outfile:

   for line in (l.strip() for l in infile):
    processed_lines += 1

    if mode == "format":
     # Проверка формата входящих строк и их переформатирование
     input_keys = input_format.split(delimiter)
     parts = line.split(delimiter)
     if len(parts) == len(input_keys):
      format_keys = format_order.split(delimiter)
      reordered = delimiter.join(parts[input_keys.index(key)] for key in format_keys)
      valid_lines += 1
      yield reordered

    elif mode == "filter":
     # Фильтрация строк по формату
     parts = line.split(delimiter)
     valid_keys = valid_format.split(delimiter)
     if len(parts) == len(valid_keys):
      valid_lines += 1
      yield line

    elif mode == "clean":
     # Очистка строки от пробелов и исключённых символов
     if exclude_chars:
      cleaned_line = ''.join(c for c in line if c not in exclude_chars).strip()
     else:
      cleaned_line = line.strip()
     valid_lines += 1
     yield cleaned_line

    elif mode == "trim":
     # Отсечение строк по длине
     if min_len <= len(line) <= max_len:
      valid_lines += 1
      yield line

 except Exception as e:
  logger.error(f"Ошибка обработки: {e}")

 finally:
  elapsed_time = time.time() - start_time
  logger.info(f"Обработка завершена за {elapsed_time:.2f} секунд.")
  logger.info(f"Всего строк обработано: {processed_lines}")
  logger.info(f"Строк, соответствующих условиям: {valid_lines}")

def process_lines(input_file, output_file, **kwargs):
 try:
  # Проверка выходной директории
  output_dir = os.path.dirname(output_file)
  if output_dir and not os.path.exists(output_dir):
   logger.info(f"Выходная директория {output_dir} не найдена. Создаём её.")
   os.makedirs(output_dir)

  processed_lines = 0
  with open(output_file, 'w', encoding='utf-8', errors='replace') as outfile:
   for line in normalize_lines(input_file, output_file, **kwargs):
    outfile.write(line + '\n')
    processed_lines += 1

  logger.info(f"Всего строк записано в файл: {processed_lines}")
 except Exception as e:
  logger.error(f"Ошибка при обработке строк: {e}")

if __name__ == "__main__":
 while True:
  print(Fore.YELLOW + "\nВыберите режим обработки:")
  print(Fore.LIGHTMAGENTA_EX + "1. Форматирование строк (format)")
  print(Fore.LIGHTCYAN_EX + "2. Фильтрация строк по формату (filter)")
  print(Fore.LIGHTRED_EX + "3. Очистка строк от спецсимволов (clean)")
  print(Fore.LIGHTBLUE_EX + "4. Обрезка строк по длине (trim)")
  print(Fore.LIGHTGREEN_EX + "0. Выход.")

  choice = input("Введите номер режима: ").strip()

  if choice == "1":
   mode = "format"
   input_file = input("Введите путь к входному файлу: ").strip()
   output_file = input("Введите путь к выходному файлу: ").strip()
   delimiter = input("Введите разделитель: ").strip()
   input_format = input("Введите ожидаемый формат входящей строки (например, log:pass:link): ").strip()
   format_order = input("Введите новый порядок формата (например, link:log:pass): ").strip()
   process_lines(input_file, output_file, mode=mode, delimiter=delimiter, input_format=input_format, format_order=format_order)

  elif choice == "2":
   mode = "filter"
   input_file = input("Введите путь к входному файлу: ").strip()
   output_file = input("Введите путь к выходному файлу: ").strip()
   delimiter = input("Введите разделитель: ").strip()
   valid_format = input("Введите допустимый формат (например, mail:pass): ").strip()
   process_lines(input_file, output_file, mode=mode, delimiter=delimiter, valid_format=valid_format)

  elif choice == "3":
   mode = "clean"
   input_file = input("Введите путь к входному файлу: ").strip()
   output_file = input("Введите путь к выходному файлу: ").strip()
   exclude_chars = input("Введите символы для исключения (например, !@#$%^&*): ").strip()
   process_lines(input_file, output_file, mode=mode, delimiter=None, exclude_chars=exclude_chars)

  elif choice == "4":
   mode = "trim"
   input_file = input("Введите путь к входному файлу: ").strip()
   output_file = input("Введите путь к выходному файлу: ").strip()
   min_len = int(input("Введите минимальную длину строки: ").strip())
   max_len = int(input("Введите максимальную длину строки: ").strip())
   process_lines(input_file, output_file, mode=mode, min_len=min_len, max_len=max_len)

  elif choice == "0":
   print("Выход из программы.")
   break

  else:
   print("Неверный выбор. Попробуйте снова.")
 
Undergrowth сказал(а):
цены не будет, если сделаешь такое контекстное меню
Нажмите, чтобы раскрыть...
Сделал отдельную версию для работы с контекстным меню для виндузятников (Тестировалось на Win 10 64bit). Учтите, что для работы утилит требуется задеплоенный интерпретатор в операционной системе. Перед установкой петухона не забудьте поставить галочку:


Есть 2 версии меню, одни модули работают только на файлах, другие (сравнение, объеденение текстовиков) только на папках.

На файлах меню выглядит так:


На папках так:


Установка:
1. Распакуйте архив в C:\MultitoolTXT\
Должно быть как-то так:

2. Запустите файл от имени администратора (не обязательно, но желательно) - install.bat, обязательно перед этим установите петухон с официального сайта (тестировал на версии 3.13.1) и не забудьте поставить галочку перед установкой "Add python.exe to PATH".
3. Если все успешно запустилось, у вас в контекстном меню должны появится все пункты для работы с текстовиками (показаны на скриншотах выше).

P.S. Если что-то не работает, просьба отписаться.

Вложения​


  • MultitoolTXT_context_menu_win.zip
    42.7 КБ · Просмотры: 2
 
Top