Многократно находить строки A-> B с помощью цикла while

#python #loops #while-loop #find #readfile

#python #циклы #цикл while #Найти #readfile

Вопрос:

Здравствуйте

Я работаю над проектом, который требует от меня многократного поиска интервала строк (от display_url до display_resources) в текстовом файле. На данный момент у меня есть такой код, но когда я его запускаю, он никогда не ломается.

Цель этого кода — :

  1. В качестве отправной точки выполните поиск строк из индекса le1 / le2.
  2. Обновите новый найденный индекс из переменных dat / det до le1 / le2 [чтобы перейти к следующему интервалу строк в файле .txt (в моем тесте их четыре)]
  3. Добавьте переменные le1 и le2 в список URL.
  4. Цикл до тех пор, пока dat amp; det не вернет значение -1.
  5. Выведите все комбинации le1 и le2, полученные в списке URL.

Ваши мысли очень помогут, спасибо.


     urls = []
    g = open('tet.txt','r')
    data=''.join(g.readlines())
    count = 0
    le1 = 1
    le2 = 1


    while count >= 0 :
        dat = data.find('display_url', le1)
        det = data.find('display_resources', le2)
        if dat < le1: 
            le1 = le1  dat
        if det < le2:
            le2 = lez  det
        urls.append(le1)
        urls.append(le2)
        if dat <= 0 :
            count = -1
            break

    print(urls)
  

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

1. что вы сделали для его отладки? (например, распечатали locals() внутри цикла, чтобы увидеть, как изменяются переменные?)

2. ps: кажется, что шага 4 в вашем описании нет в вашем коде …?

3. pps: без примерного ввода и ожидаемого результата никто не сможет вам помочь.

4. Нет, я не знаю, как это разместить? (Извините, я новичок в этом) Я могу попробовать добавить в цикл функцию print(), чтобы посмотреть, что делает программа.

5. ps: разве печать (URL-адреса) не является 4-м шагом?

Ответ №1:

Если 'display_url' и 'display_resources' изначально находятся в строке, ваши три if оператора никогда не будут запущены. Вам нужно что-то вроде следующего, которое записывает det и dat на каждом шаге и начинает поиск снова с этой точки. Цикл while продолжается до тех пор, пока оба оператора if не завершатся ошибкой.

 le1 = 0
le2 = 0
still_looking = True
while still_looking:
    still_looking = False
    dat = data.find('display_url', le1)
    det = data.find('display_resources', le2)
    if dat >= le1:
        urls.append(dat)
        le1 = dat   1
        still_looking = True                
    if det >= le2:
        urls.append(det)
        le2 = det   1
        still_looking = True
  

с помощью

 data = "somestuffdisplay_url some more stuff display_resources even more stuff display_url lastly more stuff still, can you believe it?"
  

ВОЗВРАТ:

 [9, 37, 71]
  

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

1. Большое вам спасибо, вы спасли мою жизнь.