2012-08-07 71 views
0

我正在爲來自CDC的NHANES數據集寫入數據刮取器。我遇到了文件IO問題。Python IO:在打開期間向文件名添加字符()

鑑於一年,組和標題(如2000年 「考試」, 「聽力測試」),我創建的文件名字符串:

filename = "nhanes."+str(year)+"-"+str(year+1)+"."+group+"."+titles[i]+".xpt" 

這成功地打印出作爲

"nhanes.2000-2001.exam.Audiometry.xpt" 

然後我使用此代碼下載.xpt文件在FTP服務器上:

req = urllib2.Request(ftp_loc) 
response = urllib2.urlopen(req) 
xpt_data = response.read() 
f = open(filename, 'w') 
f.write(xpt_data) 
f.close() 

ftp_loc是像 「ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/nhanes/2001-2002/OHXPRL_B.xpt」

然後,問題:我收到錯誤消息

Traceback (most recent call last): 
    (... method stack here ...) 
IOError:[Errno 22] invalid mode ('w') or filename: 'nhanes.2000-2001.exam.Audiometry\r.xpt' 

正如你所看到的,文件名現在有一個「\ r」:(任何想法如何到達那裏?謝謝!! 〜Emily

+0

此外,使用Windows 7 64位 – user1507455 2012-08-07 22:11:21

+0

而不是使用'print'來檢查你的字符串,使用'再版()'。我敢打賭,你會看到'\ r'。 – 2012-08-07 22:24:04

回答

2

文件名中的\r可能已到達那裏,因爲它已經存在於您創建文件名的數據中。特別是titles[i]。如果向我們展示填充該數組的代碼,我們可能會提供更好的解決方案。

在此期間,一種解決方法如下:

filename = "nhanes.%d-%d.%s.%s.xpt" % (year, year+1, group titles[i].strip()) 

您的問題正在調用將擺脫回車符串的strip方法的實際解決方案(也就是\r是什麼所謂的)。請注意0​​方法也將擺脫其他字符(whitespace mostly)。

代碼的其他變化只是 - 在我看來 - 更好的方式來寫你寫的東西。您實際上使用內建的string formatting來創建文件名,而不是拼接子字符串。最終結果應該是一樣的。

+0

您的答案勝過我快速寫在火車上,絕對是勝利者。 – Adrian 2012-08-07 22:44:02

0

年,組和標題列表的內容來自哪裏? \ r是一個回車符,所以我建議您對它們進行清理,以確保您刪除所有這些字符,無論是填充列表還是使用它們。

filename = "nhanes."+str(year)+"-"+str(year+1)+"."+group+"."+titles[i].strip("\r")+".xpt"