【Python】使用with open讀寫文件時,文件不存在沒有自動創建

        with open(output_filename, "wb") as f:
            f.write(html_request.content)

我用這個方法讀寫文件時,卻報錯:IOError: [Errno 2] No such file or directory: './output/http%3A//cup.baidu.com/spider'
我一開始很懵逼,明明這個方法,如果文件不存在的話,會自動創建文件的呀。。。而且,我的一級目錄是存在的啊!
後來報着試一試的心態,我把output_filename改成了『http%3Acup.comspide』試了試,然後運行就通過了!
所以,最後定位到,肯定是文件名裏的 / 未編碼造成的!python會把它當成目錄去尋找,那output下一層的目錄那必然是不存在了。
於是,我就去看了看 output_filename 的生成,如下

output_filename = os.path.join(output_directory, urllib.quote(html))

這一看,我又開始懵逼了,我明明做編碼處理了啊?爲啥/沒處理的
於是又開始百度,結果發現:urllib.quote(string,safe)這個函數是接收兩個字段的,一個是需要編碼的url地址,另一個safe是指定某個字符不被編碼!然後,重點來了,safe默認賦值是『/』
最後,水落石出,更改如下:

output_filename = os.path.join(output_directory, urllib.quote(html, safe='+/'))

就可以了!
輸出就變成了:http%3A%2F%2Fcup.com%2Fspider

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章