0
本文作者: AI研習(xí)社-譯站 | 2019-08-02 10:52 |
原標(biāo)題 | Python 3 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux 作者 | Adam Geitgey 譯者 | 林肯二百一十三(西安交通大學(xué))、Dooria
幾乎所有計(jì)算機(jī)在文件夾名稱(chēng)間使用的都是正斜杠,但微軟Windows使用的是卻反斜杠, 這不免造成了編程的一個(gè)小煩惱。
這是1980年代早期,計(jì)算機(jī)史上的一個(gè)意外。MS-DOS的第一個(gè)版本使用正斜杠來(lái)指定命令行選項(xiàng)。當(dāng)微軟在MS-DOS2.0中增加對(duì)文件夾的支持時(shí),因?yàn)檎备芤呀?jīng)被使用了,所以使用反斜杠代替。三十五年后,這種不兼容仍舊困擾著我們。
如果希望你的Python代碼能夠同時(shí)在Windows和Mac/Linux上運(yùn)行,你需要解決這類(lèi)平臺(tái)的特定問(wèn)題。幸運(yùn)的是,Python3的新模塊pathlib可以使文件操作變得更簡(jiǎn)單。
假設(shè)現(xiàn)在你有一個(gè)數(shù)據(jù)包,其中包含了你的Python項(xiàng)目里需要的文件。
下面是錯(cuò)誤的代碼:
請(qǐng)注意,因?yàn)槭窃贛ac平臺(tái)上,我使用了Unix風(fēng)格的正斜杠硬編碼路徑。這會(huì)讓W(xué)indows用戶(hù)非常頭疼。
并且,Python對(duì)混合斜杠類(lèi)型的支持僅限Windows,它無(wú)法反向工作。也就是說(shuō),代碼中的反斜杠將在Mac上完全失效。
出于上述原因以及其他更多的原因,使用硬編碼的路徑字符串編寫(xiě)代碼會(huì)被其他程序員diss的,應(yīng)該盡量避免。
你可以用os.path.join()函數(shù)來(lái)針對(duì)當(dāng)前操作系統(tǒng)正確地使用斜杠來(lái)構(gòu)建路徑:
上面的代碼在Windows和Mac都能有效工作——但問(wèn)題就是用起來(lái)很讓人頭大。每次調(diào)用os.path.join()把路徑中的每一部分作為一個(gè)獨(dú)立的字符串參數(shù)傳進(jìn)去的辦法實(shí)在太麻煩了。
Python 3.4 引入了一個(gè)用于處理文件和路徑的新標(biāo)準(zhǔn)庫(kù)——pathlib,而且很好用!
要用pathlib,只要新建一個(gè)Path()對(duì)象并傳入使用正斜杠的路徑或文件名,剩下的pathlib都幫你搞定:
如果這就是pathlib做的事情,那它可真是Python的一個(gè)不錯(cuò)的補(bǔ)充——但它做的其實(shí)更多呢~
比如,我們可以不用調(diào)用open()或者close()之類(lèi)的函數(shù),而直接讀文件的內(nèi)容:
注:上上部分的例子是有bug的,因?yàn)樽x取的文件沒(méi)有關(guān)閉。但這里的語(yǔ)句則完全避免了這個(gè)問(wèn)題!
pathlib還把最標(biāo)準(zhǔn)的文件操作變得簡(jiǎn)單易用:
你甚至可以用pathlib來(lái)將一個(gè)Unix系統(tǒng)的路徑轉(zhuǎn)換成Windows格式的路徑:
如果你非得用反斜杠還想不出問(wèn)題呢?好吧…你可以把你的路徑聲明成Windows格式的,這樣pathlib在其他操作系統(tǒng)中依然能把它轉(zhuǎn)換成合適的形式:
如果你還想再6一點(diǎn)?你甚至可以用pathlib來(lái)解析文件的相關(guān)路徑,解析網(wǎng)絡(luò)共享路徑或者生成"file://"格式的URL。下邊的例子用四行代碼(其中兩行還是import)做到了用你的Web瀏覽器打開(kāi)一個(gè)本地文件:
而這也不過(guò)是pathlib的一個(gè)小功能而已。pathlib足以替代散落在Python各種模塊中的文件相關(guān)功能??纯次臋n,試一下吧~
本文編輯:Pita
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
點(diǎn)擊【Python小技巧:3個(gè)處理文件路徑的簡(jiǎn)單方法】即可訪問(wèn):
福利大放送——滿(mǎn)滿(mǎn)的干貨課程免費(fèi)送!
「好玩的Python:從數(shù)據(jù)挖掘到深度學(xué)習(xí)」該課程涵蓋了從Python入門(mén)到CV、NLP實(shí)踐等內(nèi)容,是非常不錯(cuò)的深度學(xué)習(xí)入門(mén)課程,共計(jì)9節(jié)32課時(shí),總長(zhǎng)度約為13個(gè)小時(shí)。。
課程頁(yè)面:https://ai.yanxishe.com/page/domesticCourse/37
「計(jì)算機(jī)視覺(jué)基礎(chǔ)入門(mén)課程」本課程主要介紹深度學(xué)習(xí)在計(jì)算機(jī)視覺(jué)方向的算法與應(yīng)用,涵蓋了計(jì)算機(jī)視覺(jué)的歷史與整個(gè)課程規(guī)劃、CNN的模型原理與訓(xùn)練技巧、計(jì)算機(jī)視覺(jué)的應(yīng)用案例等,適合對(duì)計(jì)算機(jī)視覺(jué)感興趣的新人。
課程頁(yè)面:https://ai.yanxishe.com/page/domesticCourse/46
現(xiàn)AI研習(xí)社將兩門(mén)課程免費(fèi)開(kāi)放給社區(qū)認(rèn)證用戶(hù),只要您在認(rèn)證時(shí)在備注框里填寫(xiě)「Python」,待認(rèn)證通過(guò)后,即可獲得該課程全部解鎖權(quán)限。心動(dòng)不如行動(dòng)噢~
認(rèn)證方式:https://ai.yanxishe.com/page/blogDetail/13999
雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。