Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 25, 2022 15:50:37

python13
Зарегистрирован: 2022-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа со строками в файле

Привет! Есть база вида:

 -
20246569  HOST:		https://name.name
20246570  USER:		Login
20246571  PASS:		Password
  988549  Host: https://name.name
  988550  Login: Login
  988551  Password: Password
 8180514  HOST:		https://name.name
 8180515  LOG :		Login
 8180516  PWD :		Password
-

Каким образом я могу Найдя нужный мне Host/Url обратиться к двум строкам ниже найденного host/url?
Например для того, что бы из базы этого вида создать базу более простого вида log:pass

Как работать с файлами - понятно. Но как работать со строками в данном случае?
Поиск строки с нужным host/url имеется, но как обратиться к двум строкам под host/url - не понимаю(

Буду благодарен вашей помощи. Спасибо.

Офлайн

#2 Июнь 25, 2022 16:30:30

python13
Зарегистрирован: 2022-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа со строками в файле

Решил данным способом:

     with open("new5 (2).txt", "r") as file:
        for line in file:
            counter += 1
            if "name" in line:
                print(next(islice(file, counter + 1)).split(":")[1].lstrip(), end="")
                print(next(islice(file, counter + 2)).split(":")[1].lstrip(), end="\n")

Вывод:

Log
Pass

Log
Pass

Log
Pass

Log
Pass

Отредактировано python13 (Июнь 25, 2022 16:31:10)

Офлайн

#3 Июнь 26, 2022 00:53:27

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Работа со строками в файле

python13
Каким образом я могу Найдя нужный мне Host/Url обратиться к двум строкам ниже найденного host/url?
Тут велика вероятность ошибки. Если ты так сделаешь, как ты сделал, то рано или поздно это даст какую-нибудь ошибку, а исправить её будет очень сложно, так как нужно будет программу заново писать.

Поэтому это надо сделать правильно изначально.

Соответственно,
1)
Ты должен сгруппировать записи по идентификаторам из первого поля. Велика вероятность, что под сайтом будут идти имя и пароль от другого сайта, потому что идентификаторы у сайта и имени и пароля разные.
2)
Все эти текстовые данные должны быть сначала преобразованы во внутренние питоновские данные. То есть у тебя не должно быть ни регистра, ни табуляций, ни двоеточий, ни дефисов, когда ты уже выбираешь нужные данные.

Поэтому сначала нужно сгруппировать строки по идентификаторам. Потом надо сгруппированные строки преобразовать в словари. А затем уже нужно из словарей выбирать группы (ссылка, имя, пароль). Тогда это всё будет работать надёжно и без ошибок.

А если ты просто хочешь по-быстрому выбрать текст, то тебе надо читать по три строки и всё.
1. Читаешь три строки.
2. Проверяешь первую строку.
3. Если первая строка подходит, то берёшь из второй строки имя, а из третьей строки пароль. Если первая строка не подходит, то отбрасываешь остальные две строки и читаешь снова три строки из файла.

Пример чтения файла по три строки и срабатывание действий на какой-то определённой строке.
  
>>> with open('/etc/passwd', encoding='utf-8') as fin:
...     while True:
...         line1 = next(fin, '')
...         line2 = next(fin, '')
...         line3 = next(fin, '')
...         if line1 == '':
...             break
...         if line1.startswith('adm'):
...             print(line1, end='')
...             print(line2[:line2.index(':')])
...             print(line3[:line3.index(':')])
... 
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp
sync
>>>



Отредактировано py.user.next (Июнь 26, 2022 01:00:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version