Как мне оставаться в цикле for, если выполняются определенные условия, прежде чем переходить к следующей итерации?

#python #for-loop #python-requests

Вопрос:

У меня есть три группы данных. Я хочу собрать все данные из 3 групп. Однако я могу получить только 100 записей на запрос. В каждой группе более 100 записей. Я могу сказать, сколько данных в каждой группе, только после того, как получу первую партию данных для группы, из-за чего кажется, что я не могу использовать цикл while. Вот что у меня есть.

 def getOTCdata(weekStartDate):
    
    #set start and record limit
    start = 0
    records = 100000
    groups = ["G1", "G2", "G3"]
    
    #create for loop to get data with filters
    for tier in tier:
        params = {
            "compareFilters": [ 
                        { "compareType": "equal", "fieldName": "group", "fieldValue": group}
            ]
        }
        url = 'myURL'
        data = requests.post(url, data=json.dumps(params))
        
    
        #code to download data - removed so it's not bogged down

        #check if the record total is more or less than the data remaining
        recordTotal = (data.headers)['Records']
        if start   records < recordTotal:
            start =  =100
            #I WANT TO CONTINUE IN GROUP 1
        else:
            #MOVE TO GROUP 2
 

Предположим, что у G1 150 записей. Я хочу, чтобы он еще раз запустился в G1. Поскольку я соберу все данные во второй очереди, я затем захочу перейти на G2. Проблема в том, что я не знаю общего количества записей, пока не сделаю запрос и не загружу данные, поэтому я не могу использовать цикл while сразу после цикла for.

Ответ №1:

Используйте цикл while

  recordTotal = (data.headers)['Records']
 while start   records < recordTotal:
     start  = 100
        
 

Он не выйдет до тех пор, пока не будет выполнено условие start записи

Я также изменил start на start = 100 , если вы хотите, чтобы переменная start каждый раз увеличивалась на 100.

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

1. Будет ли это затем запускать цикл for в той же группе? Похоже, что это просто увеличит общее количество стартов и не пройдет через цикл.

2. когда он покидает цикл while после выполнения условия, он останется в цикле for, в который он был вложен. если цикл for равен G1, вы можете просто использовать break его для выхода из цикла for.

3. Будет ли он сам сбрасываться до 0 после выполнения условия?