2011-05-18 43 views
1

嗨,大家好我已經把這個有用的Python腳本,讓我從一個網站獲取一些天氣數據。 我將創建一個文件和數據集indide。Python的問題:打開和關閉文件返回語法錯誤

東西不工作。它返回這個錯誤。

File "<stdin>", line 42 
    f.close() 
    ^
SyntaxError: invalid syntax 

怎麼了?在這一行中,我只關閉文件! 任何人都可以幫助我嗎?

這是python代碼。

import urllib2 
from BeautifulSoup import BeautifulSoup 
# Create/open a file called wunder.txt (which will be a comma-delimited file) 
f = open('wunder-data.txt', 'w') 
# Iterate through year, month, and day 
for y in range(1980, 2007): 
    for m in range(1, 13): 
    for d in range(1, 32): 
     # Check if leap year 
     if y%400 == 0: 
     leap = True 
     elif y%100 == 0: 
     leap = False 
     elif y%4 == 0: 
     leap = True 
     else: 
     leap = False 
     # Check if already gone through month 
     if (m == 2 and leap and d > 29): 
     continue 
     elif (m == 2 and d > 28): 
     continue 
     elif (m in [4, 6, 9, 10] and d > 30): 
     continue 
     # Open wunderground.com url 
     url = "http://www.wunderground.com/history/airport/KBUF/"+str(y)+ "/" + str(m) + "/" + str(d) + "/DailyHistory.html" 
     page = urllib2.urlopen(url) 
     # Get temperature from page 
     soup = BeautifulSoup(page) 
     dayTemp = soup.body.nobr.b.string 
     # Format month for timestamp 
     if len(str(m)) < 2: 
     mStamp = '0' + str(m) 
     else: 
     mStamp = str(m) 
     # Format day for timestamp 
     if len(str(d)) < 2: 
     dStamp = '0' + str(d) 
     else: 
     dStamp = str(d) 
     # Build timestamp 
     timestamp = str(y) + mStamp + dStamp 
     # Write timestamp and temperature to file 
     f.write(timestamp + ',' + dayTemp + '\n') 
# Done getting data! Close file. 
f.close() 
+2

混合標籤和空格? – 2011-05-18 13:41:08

+0

你代碼中的'f.close()'不在42行。準確。 – 2011-05-18 13:44:46

+0

是的,現在代碼是正確的,我刪除了虛線。 – MrSlash 2011-05-18 14:44:43

回答

1

看起來你在那裏有一個空白問題。檢查文件的空白 - 查看空格和製表符在哪裏。如果文件中包含製表符和空格,請將它們全部轉換爲空格。

f.close應該是相同的縮進水平f = open('wunder-data.txt', 'w')

+0

是的,我檢查了所有的空格。 f.close和f打開的是相同的縮進級別!還有什麼可能是這個問題? :( – MrSlash 2011-05-18 14:24:07

+2

當我複製粘貼你的代碼到一個文件並在Windows上運行它與Python 2.6,沒有'SyntaxError'產生。你如何運行它? – 2011-05-18 15:19:00

0

f.close()該生產線不就行了42,所以你確定這是給出了錯誤的代碼?

此外,Python似乎處理在stdin收到的程序,這是你的意圖嗎?

0

刪除代碼中的行,直到語法錯誤消失。那麼你將能夠縮小問題的範圍。