Python中的循环倒计时

时间:2011-11-14 18:16:27

标签: python range counter countdown

这是我的脚本,我希望它能够打印并减去1

for eachNumber in range(counter, 0, -1): print(eachNumber)

来自counter的每个循环。当我尝试将它放在for循环中时,我现在让它打印所有完整的数字,直到它达到counter我希望它从counter开始倒数,对于脚本中的每个for video_id in ids:来说。

#!/usr/bin/env python
"""Download video meta-info for a given video urls from input file.

Input files is in Firefox'es bookmarks export file
"""
import csv
import re
import sys
import urlparse
from BeautifulSoup import BeautifulSoup
from gdata.youtube.service import YouTubeService

# parse bookmarks.html
with open(sys.argv[1]) as bookmark_file:
    soup = BeautifulSoup(bookmark_file.read())

# extract youtube video urls
video_url_regex = re.compile('http://www.youtube.com/watch')
urls = [link['href'] for link in soup('a', href=video_url_regex)]

# extract video ids from the urls
ids = []
for video_url in urls:
    url = urlparse.urlparse(video_url)
    video_id = urlparse.parse_qs(url.query).get('v')
    if not video_id: continue # no video_id in the url
    ids.append(video_id[0])

# remove duplicates
ids = list(set(ids))

# print total number of video_ids
counter = len(ids)
print counter

# get some statistics for the videos
yt_service = YouTubeService()
yt_service.developer_key = 'AI39si4yOmI0GEhSTXH0nkiVDf6tQjCkqoys5BBYLKEr-PQxWJ0IlwnUJAcdxpocGLBBCapdYeMLIsB7KVC_OA8gYK0VKV726g'
#NOTE: you don't need to authenticate for readonly requests
yt_service.ssl = True #NOTE: it works for readonly requests
#yt_service.debug = True # show requests

writer = csv.writer(open(sys.argv[2], 'wb'))
for video_id in ids:
    try:
        entry = yt_service.GetYouTubeVideoEntry(video_id=video_id)
        dir(entry.rating)
        ['FindExtensions', 'ToString', '_AddMembersToElementTree', '_BecomeChildElement', '_ConvertElementAttributeToMember', '_ConvertElementTreeToMember', '_HarvestElementTree', '_ToElementTree', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_attributes', '_children', '_namespace', '_tag', 'average', 'extension_attributes', 'extension_elements', 'max', 'min', 'num_raters', 'text']
        comments = yt_service.GetYouTubeVideoCommentFeed(video_id=video_id)
    except Exception, e:
        print >>sys.stderr, "Failed to retrieve entry video_id=%s: %s" %(
            video_id, e)
    else:
        title = entry.media.title.text
        print "Title:", title
        view_count = entry.statistics.view_count
        print "View count:", view_count
        favorites = entry.statistics.favorite_count
        print "Favorite Count:", favorites
        comments = comments.total_results.text
        print "Comment Count:", comments
        if entry.rating is None: # skip it
            average = 0
        else:
            average = entry.rating.average
        print "Average Rating:", average
        if entry.rating is None: # skip it
            num_raters = 0
        else:
            num_raters = entry.rating.num_raters
        print "Number of Raters:", num_raters
        author = entry.author[0].name.text
        print "Autor:", author
        published = entry.published.text
        print "Published on:", published
        tags = entry.media.keywords.text
        print "Tags:", tags
        print "#########################################################"
        writer.writerow((video_id, title, view_count, favorites, comments, average, num_raters, author, published, tags))

1 个答案:

答案 0 :(得分:2)

很难说出你的意思,但我认为问题是你在另一个中嵌套了一个for循环,而你实际上并不想这样做。尝试在ids循环中添加此内容:

print counter, "videos remaining"
counter -= 1

这只会减少每个Id的计数器一次,而不是在每个Id的整个范围内运行。