中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Python小技巧:3個(gè)處理文件路徑的簡(jiǎn)單方法

2019-08-08    來(lái)源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

原標(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ī)在文件夾名稱間使用的都是正斜杠,但微軟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)行,你需要解決這類平臺(tái)的特定問(wèn)題。幸運(yùn)的是,Python3的新模塊pathlib可以使文件操作變得更簡(jiǎn)單。

以下是一些使用pathlib處理文件名的方法,它可以使命名操作變得簡(jiǎn)單得多。

錯(cuò)誤的方法:手工構(gòu)建文件路徑

假設(shè)現(xiàn)在你有一個(gè)數(shù)據(jù)包,其中包含了你的Python項(xiàng)目里需要的文件。

 

 

下面是錯(cuò)誤的代碼:

 

 

請(qǐng)注意,因?yàn)槭窃贛ac平臺(tái)上,我使用了Unix風(fēng)格的正斜杠硬編碼路徑。這會(huì)讓W(xué)indows用戶非常頭疼。

從技術(shù)上講,這個(gè)代碼在Windows上也能運(yùn)行,因?yàn)镻ython會(huì)在調(diào)用open()函數(shù)時(shí)識(shí)別出任何一種斜杠。即便如此,你也不應(yīng)該依賴它。不是所有的python庫(kù)都可以在錯(cuò)誤的操作系統(tǒng)上使用錯(cuò)誤的斜杠,特別是當(dāng)它們有外部程序或庫(kù)接口時(shí)。

并且,Python對(duì)混合斜杠類型的支持僅限Windows,它無(wú)法反向工作。也就是說(shuō),代碼中的反斜杠將在Mac上完全失效。

 

 

出于上述原因以及其他更多的原因,使用硬編碼的路徑字符串編寫代碼會(huì)被其他程序員diss的,應(yīng)該盡量避免。

老方法:Python的os.path模塊

Python的os.path模塊提供了很多有用的工具以幫助我們處理這些面向特定操作系統(tǒng)的文件系統(tǒng)問(wèn)題。

你可以用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í)在太麻煩了。

因?yàn)閛s.path模塊的大部分函數(shù)都像os.path.join()這樣笨拙,Python開發(fā)者們經(jīng)常就懶得用這些工具,結(jié)果寫了一堆跨平臺(tái)bug,還惹惱了一群用戶。

新方法:Python 3 的 pathlib!

Python 3.4 引入了一個(gè)用于處理文件和路徑的新標(biāo)準(zhǔn)庫(kù)——pathlib,而且很好用!

要用pathlib,只要新建一個(gè)Path()對(duì)象并傳入使用正斜杠的路徑或文件名,剩下的pathlib都幫你搞定:

 

 

請(qǐng)注意兩點(diǎn):

在pathlib中請(qǐng)直接用正斜杠(“/”)。Path對(duì)象可以將正斜杠轉(zhuǎn)換成當(dāng)前操作系統(tǒng)應(yīng)該使用的正確斜杠。Nice!

如果想在某個(gè)Path對(duì)象后添加內(nèi)容,只要在代碼里使用“/”操作符(也就是除號(hào)!?)。跟一遍又一遍地敲os.path.join(a, b)的日子說(shuō)拜拜吧!

如果這就是pathlib做的事情,那它可真是Python的一個(gè)不錯(cuò)的補(bǔ)充——但它做的其實(shí)更多呢~

比如,我們可以不用調(diào)用open()或者close()之類的函數(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瀏覽器打開一個(gè)本地文件:

 

 

而這也不過(guò)是pathlib的一個(gè)小功能而已。pathlib足以替代散落在Python各種模塊中的文件相關(guān)功能?纯次臋n,試一下吧~

英語(yǔ)原文:https://medium.com/@ageitgey/python-3-quick-tip-the-easy-way-to-deal-with-file-paths-on-windows-mac-and-linux-11a072b58d5f

標(biāo)簽: Python 編程語(yǔ)言

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:對(duì)比了Python、Go和Rust之后,他得出了這個(gè)結(jié)論

下一篇:GitHub上Star量最高的5個(gè)機(jī)器學(xué)習(xí)項(xiàng)目