【问题标题】:Most Efficient Way of Iterating Over Large (20,000+ items) List Python迭代大型(20,000 多个项目)列表 Python 的最有效方法
【发布时间】:2014-03-31 15:04:48
【问题描述】:

我有一组使用 Tweepy Python 库访问的 Twitter 数据。然而,我很快意识到我没有收集到所有必要的数据。我现在正在做的是从这个未清理的数据集中提取推文 ID,将它们存储在一个列表中,然后遍历这个列表以将每个推文 ID 作为查询发送到 Twitter 的 API。我想将每个返回的 Twitter 状态作为 JSON 对象/Python 字典附加到列表中。然后我想把这些写到一个平面文件或 MongoDB 中(假设我可以及时学习后者)。我一直在尝试类似以下代码:

long_list = [id1, id2, id3, id4 .... id20000]
status_list = []

for i in long_list:
    try:
        tweet = api.get_status(i)
        status_list.append(tweet._payload)
    except:
        pass

但是,上面的代码似乎超时了,我的 Python 解释器在执行后几乎立即变得无响应。我认为必须有一种更有效的方法来做到这一点,但我不知道那可能是什么。任何帮助将不胜感激。

【问题讨论】:

  • 在 python 中遍历列表非常有效。我怀疑您的问题出在api.get_status(i) 而不是列表迭代中。
  • 您是否尝试过将调试消息放入其中以查看进展情况?类似for idx, i in enumerate(long_list): print("Querying {:d} of {:d}".format(idx + 1, len(long_list))")...
  • @JLLagrange 我尝试在print 行之后添加一个简单的print 语句,但控制台没有任何内容。
  • 你能手动获取一个状态,看看需要多长时间?
  • 我想知道您是否达到了对 Twitter 的 api 调用的限制?

标签: python list optimization iteration tweepy


【解决方案1】:

您确定是您的列表代码变慢了,而不是您调用的 API?检查性能,可以试试profile it,还有runsnakerun之类的图形工具

检查您的代码是否处于中间状态的一种简单方法是打印某些内容, 喜欢:

print 'getting status from tweet'
tweet = api.get_status(i)
print 'appending to my list'
status_list.append(tweet._payload)

或者您可以使用logging 模块为您处理好事情。

import logging
FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging.basicConfig(format=FORMAT)
logging.info('getting status from tweet')

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2022-10-19
    • 2022-06-13
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多