首页 > 解决方案 > 修改循环迭代

问题描述

这是我正在使用的抓取脚本的简化版本。我的问题很简单:有没有办法修改循环,以便在最后一次迭代中“跳过” time.sleep()?(我包括了该计时器以避免滥用 api 调用)在最后一次迭代之后,没有下载任何内容,因此 last time.sleep() 不是必需的,我希望代码直接转到脚本的第二部分。

import random
import math
import datetime
from datetime import datetime, timedelta
import time

user_list = ['a', 'b', 'c']

def scraper():
    print('Do something')

def parser():
    print('Exporting to XLSX')

# First part, downloading.
for user in user_list:
    scraper()
    # Sleep timer
    sleep_seconds = random.randint(300*1000, 600*1000)/1000
    print('Sleeping for {} seconds...'.format(sleep_seconds))
#   time.sleep(sleep_seconds)
# Second part, parsing.
parser()

输出:

Do something
Sleeping for 494.028 seconds...
Do something
Sleeping for 562.442 seconds...
Do something
Sleeping for 515.752 seconds... (I want to skip this one)
Exporting to XLSX

我正在考虑做类似的事情:

for user in user_list:
    if user == user_list[-1]:
        print(user)
        scraper()
    else:
        print(user)
        scraper()
        # Sleep timer
        sleep_seconds = random.randint(300*1000, 600*1000)/1000
        print('Sleeping for {} minutes...'.format(sleep_seconds))

# Second part, parsing.
parser()

但我不确定这是否是“最佳”方式。

标签: pythonpython-3.x

解决方案


一个简单的方法是跟踪我们所在的索引,枚举

>>> data = list(range(10))
>>> lastintex = len(data)-1
>>> for i,x in enumerate(data):
        print(x)
        if i<lastintex:
            print("--")

        
0
--
1
--
2
--
3
--
4
--
5
--
6
--
7
--
8
--
9
>>> 

推荐阅读