使用while和for循环在python中迭代列表 - 问题

时间:2015-07-30 10:15:47

标签: python api for-loop twitter while-loop

我正在尝试使用名单列表查询Twitter API并获取他们的朋友列表。 API部分很好,但我无法弄清楚如何通过前5个名称,拉结果,等待一段时间来尊重速率限制,然后在下一个5再次执行,直到列表结束。我遇到麻烦的代码就是:

first = 0
last = 5
while last < 15: #while last group of 5 items is lower than number of items in list#
    for item in list[first:last]: #parses each n twitter IDs in the list#
        results = item 
        text_file = open("output.txt", "a") #creates empty txt output / change path to desired output#
        text_file.write(str(item) + "," + results + "\n") #adds twitter ID, resulting friends list, and a line skip to the txt output#
        text_file.close()
        first = first + 5 #updates list navigation to move on to next group of 5#
        last = last + 5
        time.sleep(5) #suspends activities for x seconds to respect rate limit#

这个脚本不应该通过列表中的前5个项目,将它们添加到输出文件中,然后更改first:last参数并循环它直到“last”变量为15或更高?

2 个答案:

答案 0 :(得分:1)

不,因为你的缩进是错误的。一切都发生在for循环中,所以它会处理一个项目,然后先改变最后一个,然后再睡觉...

将最后三行移回一个缩进,以便它们与for语句对齐。这样,他们将在前五个完成后执行。

答案 1 :(得分:0)

Daniel发现了这个问题,但这里有一些代码改进建议:

first, last = 0, 5
with open("output.txt", "a") as text_file:
    while last < 15:
        for twitter_ID in twitter_IDs[first:last]:
            text_file.write("{0},{0}\n".format(twitter_ID))
        first += 5 
        last += 5
        time.sleep(5)

正如您所看到的,我删除了results = item,因为它似乎是多余的,利用了with open...,还使用了+=来增加。

你能解释一下为什么你在做item = results?