2013-07-28 90 views
-1

我正在嘗試構建一個腳本,該腳本將通過網站進行掃描,創建帶時間戳的文件夾,然後將時間戳文件放入該文件夾中。我能夠通過網站掃描腳本並製作帶時間戳的文件,但是當我嘗試獲取動態命名的文件夾時,出現錯誤。我已經發布了代碼破壞的工作代碼。我不知道該怎麼做,歡迎任何建議。整數值錯誤Python寫入文件

ValueError: mode string must begin with one of 'r', 'w', 'a' or 'U', not 
'dataC1-07-28-2013.csv' 

這是代碼,非工作代碼被註釋掉:

import urllib2 
import datetime 
#import os 

today = datetime.date.today() 
todayDate = today.strftime('%m-%d-%Y') 

#newpath = '/home/blah/Data ' + todayDate 
#if not os.path.exists(newpath): os.makedirs(newpath) 

print "starting load for", todayDate 

stub = "http://website.ashx?v=151&c=" 
for i in range(1, 66): 
    print "getting", i, "..." 
    data = urllib2.urlopen(stub + str(i)).read() 
    f = open("fooC" + str(i) + "-" + todayDate +".csv", "w") 
# f = open('newpath',"fooC" + str(i) + "-" + todayDate +".csv", "w") 
    f.write(data) 
    f.close() 

print "load complete!" 
+0

只有註釋掉的代碼纔會導致該錯誤。你確定你重新運行你的腳本? –

+1

我覺得你認爲將多個參數傳遞給'open'會將它們連接在一起,但它不會。您需要通過'os.path.join'手動連接目錄和文件名。 – Wessie

回答

3

你需要建立一個絕對路徑,最好使用os.path.join()

f = open(os.path.join('newpath', "fooC" + str(i) + "-" + todayDate +".csv"), "w") 

open()不採用單獨的目錄和文件名參數,第二個參數是mode參數,alw AYS。

+0

謝謝!在發佈之前,我應該多挖一些open(),對於這個毫無用處的問題感到抱歉。有一件事是我必須刪除圍繞新路徑的'',否則會嘗試創建一個名爲newpath/foo的目錄,而不是使用先前定義的路徑。 – cranberry

1

在你的註釋掉後,你輸入三個參數,而只需要兩個參數(docs here):文件名和打開它的模式(讀,寫等)。

爲了打開一個新的子目錄中的文件,你必須使用os.path.join來獲取文件(你可以閱讀更多關於它如何工作here)。一個例子:

with open(os.path.join(path,filename), "w") as f: 
    #Here do what you want with the file 

希望這會有所幫助。同時在塊中打開文件比僅僅打開文件要安全得多,就我所知。