2011-08-18 107 views
4

這裏是例子: 我試圖抓住一系列的XML頁面,然後從它們中提取數據。Python:循環做同樣的事情到一個項目n次,而不是一次n項目

它下載每個單獨的頁面,因爲while循環被設計成可以執行,但tester()函數從它下載的第一個文件打印數據V次,儘管它每次循環後都要下載並清除文件。

這是殺了我我做錯了什麼?

def tester(): 
    with open('raw.txt') as myFile: 
     test = linecache.getline('raw.txt', 12) 
     print test 
     test = "" 
     myFile.close 

def grab_data(Year, rcvote): 
    link = "XXX/%s/roll%s.xml" % (Year, rc) 
    site = urllib2.urlopen(link) 
    localFile = open('raw.txt', 'w') 
    localFile.write(site.read(100000)) 
    localFile.close() 
    tester() 


while (V !=0): 
    rc = str(V) 
    if (len(rc) == 2): 
     rc = "0%s" % (rc) 
    elif (len(rc) == 1): 
     rc = "00%s" % (rc) 
    else: 
     rc = rc 
    grab_data(Year, rc) 
    V = V - 1 
+0

更多難題:如果直接使用'rcvote'爲'grab_data',爲什麼要傳遞'rc'? –

+0

無關你的問題,試試這一行將'V'轉換爲零填充字符串:'rc ='%03d'%V' – Marty

回答

3

問題是linecache模塊。它假定同名文件是相同的。

但是爲什麼要將數據寫入文件只是爲了再讀一遍?

def tester(text): 
    line12 = text.splitlines()[11] 
    print line12 

def grab_data(year, rcvote): 
    link = "XXX/%s/roll%03d.xml" % (year, rcvote) 
    site = urllib2.urlopen(link) 
    tester(site.read(100000)) 

while v: 
    grab_data(year, rc) 
    v -= 1 
+0

我是python的新手,所以我並不總是做出最好的決定。什麼會更好? – jimstandard1029

+0

我更新了一些代碼。確切地說,是 –

+1

。同樣''linecache.checkcache()'會重新檢查緩存文件並將它們從緩存中刪除,如果它們在磁盤上更改的話。但在這個例子中仍然使用'linecache'沒有多大意義。爲什麼不直接從文件或網址中讀取。 –

相關問題