2011-11-14 88 views
0

循環這是我的劇本,我希望它打印和減去1倒計時在Python

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)) 
+0

這是'video_id in id:'我正在研究。 –

回答

2

很難告訴你的意思,但我認爲問題是,你一個嵌套在另一個循環,當你實際上並不想這樣做。嘗試添加這是你ids循環中:

print counter, "videos remaining" 
counter -= 1 

這只是降低了計數器,一旦每個ID,而不是在整個範圍內爲每一個運行。