Найти - Пользователи
Полная версия: Нужно нормализовать и почистить базу вида log:pass | Как?
Начало » Python для новичков » Нужно нормализовать и почистить базу вида log:pass | Как?
1 2
python13
Привет, буду рад помощи!

Есть .txt с базой вида:

login:password
asdasd-!asd1321@


login2:password2
login3:password3

login+password
login4:password4
login5:password5

Нужно привести к виду:
login:password
login2:password2
login3:password3
login4:password4
login5:password5

Что мы сделали:
1) Очистили пустые строки
2) Очистили все строки, которые не имеют формат “text:text”

Вопрос:
Каким образом лучше всего реализовать это? Знаю, что вопрос не слишком трудный, но я хотел бы понять, как правильнее всего создавать подобные ‘функции-нормализаторы’. К тому же в силу неопытности есть сомнения при попытке написать самостоятельно в первый раз.

Спасибо.

FishHook
python13
Каким образом лучше всего реализовать это?
грепом же
ZerG
python13
Каким образом лучше всего реализовать это?
Для начала ударить того кто придумал такой формат хранения логина/пароля байдаркой по голове.
потому что у нас могут быть пароли и имена вида
“Pupirishe:” “upiPraol”
или
“+Pupirishe:” “:+PupiPraol-!”
Предположим что пароль и имена не могут содержать эти символы.
Тогда банально вам можно открыть файл, и в каждой строке заменить +/- на символ :
сделать это очень просто

py.user.next
python13
Что мы сделали:
1) Очистили пустые строки
2) Очистили все строки, которые не имеют формат “text:text”
Выбери все строки в формате
<правильная пара> ::= <строка> <двоеточие> <строка>

python13
я хотел бы понять, как правильнее всего создавать подобные ‘функции-нормализаторы’
Для этой задачи ты должен выбрать правильные строки за один проход. Шаблон можешь задать через регулярное выражение (модуль re).
Вообще же, задача может стоять сложнее и потребуется несколько проходов. Сначала чистишь один слой, потом чистишь второй слой, потом чистишь третий слой и так далее. А когда всё почищено, выбираешь из этого то, что надо. Бывает, что нужно что-то дописать к данным, чтобы легче было выбирать из них потом. Бывает, что нужно данные разметить как-то вспомогательно, чтобы при выборе правильных элементов не ошибиться.
ZerG
Самое интересное как этот файл вообще считывается. По ходу он руками забивался. А значит что количество строк позволяет его руками вычистить быстрее чем питон выучить.
py.user.next
ZerG
Самое интересное как этот файл вообще считывается. По ходу он руками забивался.
Да это макетный файл. На нём, как на макете, пишется скрипт, а скрипт этот потом применяется к гигабайтным файлам. Соответственно, скрипт надо написать оптимально, а сам этот файл нафиг не нужен, он только для написания скрипта существует.
ZerG
Не суть. Если у меня пароль 4 плюса 4 минуса и все через двоеточие?
py.user.next
ZerG
Если у меня пароль 4 плюса 4 минуса и все через двоеточие?
Всё сработает
<правильная пара> ::= <строка> <двоеточие> <строка>
Строку определяешь как множество подходящих символов
<строка> ::= <буква> | <цифра> | <специальный не двоеточие>
и так далее.

Можно и точнее определить: строку для логина и строку для пароля. Там уже можно ветвить их индивидуально. Читай форму Бэкуса-Наура.
xam1816
  
txt = '''login:password
asdasd-!asd1321@   
login2:password2
login3:password3
login+password
login4:password4
login5:password5'''
out = ''
def check_log(login):
    """проверяем логин, если норм возвращаем True"""
    return True
def check_pass(password):
    """проверка"""
    return True
for line in txt.splitlines():
    if line.count(':') == 1:
        login, password = line.split(':')
        if check_log(login) and check_pass(password):
            out += '{}:{}\n'.format(login, password)
#
print(out)
ZerG
+login6:-:password:
login7::+:password
login8:-:password:

и все пропало
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB