最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python解決Windows文件名非用反斜杠問題(python 小技巧)

 更新時間:2019年11月04日 13:59:47   作者:Adam Geitgey  
要想讓你的 Python 代碼同時在 Windows 和 Mac/Linux 上工作,你需要處理不同系統(tǒng)文件名用不同斜杠的問題。而 Python 3 有一個名為「pathlib」的新模塊,可以幫你解決這個麻煩,需要的朋友可以參考下

 

在編程過程中,我們往往會遇到一個小麻煩——微軟 Windows 系統(tǒng)在文件夾名之間使用反斜杠字符,而幾乎所有其它的計算機(jī)(操作系統(tǒng))都使用正斜杠:

Windows filenames: 
C:\some_folder\some_file.txt 
Most other operating systems: 
/some_folder/some_file.txt 

這是由于上世紀(jì) 80 年代早期計算機(jī)歷史上的一個小意外?!窶S-DOS」的第一版使用了正斜杠字符來指定命令行選項。當(dāng)微軟在「MS-DOS 2.0」中加入了對文件夾的支持時,正斜杠字符已經(jīng)被使用了,所以他們采用了反斜杠作為替代。35 年后,我們?nèi)匀槐皇芾в谶@種不一致性。

如果你想讓你的 Python 代碼同時在 Windows 和 Mac/Linux 上工作,你就需要處理這種與平臺相關(guān)的問題。幸運的是,Python 3 有一個名為「pathlib」的新模塊,使得用戶處理文件幾乎沒有任何困難。

「pathlib」模塊鏈接: https://docs.python.org/3/library/pathlib.html

讓我們快速瀏覽一下處理文件名路徑的不同方法,看看「pathlib」如何能讓你的生活變得更美好!

錯誤的解決方案:手動構(gòu)建文件路徑

假設(shè)你有一個數(shù)據(jù)文件夾,該文件夾包含你想要在你的 Python 程序中打開的文件:

 

在 Python 中對其進(jìn)行編碼是「錯誤」的方式:

data_folder = "source_data/text_files/" 
file_to_open = data_folder + "raw_data.txt" 
f = open(file_to_open) 
print(f.read()) 

請注意,由于我使用的是 Mac 系統(tǒng),所以我使用了「Unix」風(fēng)格的正斜杠對路徑進(jìn)行了硬編碼。這也會讓 Windows 的用戶感到憤怒。

從技術(shù)上講,這段代碼在 Windows 上仍然有效,因為 Python 有一個「黑客」(hack)技術(shù):當(dāng)你在 Windows 上調(diào)用「open()」函數(shù)時,它會識別這兩種斜線。但即便如此,你也不應(yīng)該依賴它。如果你在錯誤的操作系統(tǒng)上使用了錯誤類型的斜杠(尤其是在它們與外部程序或代碼庫交互時),并不是所有的 Python 庫都會正常工作。

Python 對混合斜杠類型的支持是一種只針對 Windows 的「黑客」技術(shù),它反過來并不起作用。在 Mac 系統(tǒng)環(huán)境下,在代碼中使用反斜杠會導(dǎo)致徹底失?。?/p>

data_folder = "source_data\\text_files\\" 
file_to_open = data_folder + "raw_data.txt" 
f = open(file_to_open) 
print(f.read()) 
# On a Mac, this code will throw an exception: 
# FileNotFoundError: [Errno 2] No such file or directory: 'source_data\\text_files\\raw_data.txt' 

由于所有這些原因以及其他原因,使用硬編碼的路徑字符串編寫代碼,是一種會讓其他程序員十分「嫌棄」的做法。一般來說,你應(yīng)該盡量避免這么做。

以前的解決方案:Python 的「os.path」模塊

Python 的「os.path」模塊有很多工具來處理這類針對特定操作系統(tǒng)的文件系統(tǒng)問題。

你可以使用「os.path.join()」為當(dāng)前的操作系統(tǒng)構(gòu)建一個使用正確類型斜杠的路徑字符串:

import os.path 
data_folder = os.path.join("source_data", "text_files") 
file_to_open = os.path.join(data_folder, "raw_data.txt") 
f = open(file_to_open) 
print(f.read()) 

這段代碼可以同時在「Windows」或「Mac」系統(tǒng)上完美運行。問題是它使用起來很麻煩。寫出「os.path.join()」并將路徑的每個部分作為獨立的字符串傳給該函數(shù)非常冗長,而且很不直觀。

由于「os.path」模塊中的大多數(shù)函數(shù)使用起來很煩人,開發(fā)者們通常會「忘記」使用它們,即使他們知道這樣做更好。這導(dǎo)致出現(xiàn)了很多跨平臺的 Bug,也引起了用戶的憤怒。

更好的解決方案:Python 3 的「pathlib」!

為了處理文件和路徑,Python 3.4 引入了一個名為「pathlib」的新標(biāo)準(zhǔn)庫,而且非常好用!

要使用該庫,你只需使用正斜杠將一個路徑或文件名傳給一個新的「Path()」對象,然后它將處理余下的操作:

from pathlib import Path 
data_folder = Path("source_data/text_files/") 
file_to_open = data_folder / "raw_data.txt" 
f = open(file_to_open) 
print(f.read()) 

在這里,有兩點需要注意:

  •  你應(yīng)該在使用「pathlib」函數(shù)的情況下使用正斜杠?!窹ath()」函數(shù)將會把正斜杠轉(zhuǎn)化為適應(yīng)當(dāng)前操作系統(tǒng)環(huán)境的正確斜杠。贊!
  •  如果你想要在路徑上進(jìn)行添加,你可以直接在你的代碼中使用「/」操作符。你再也不用一遍又一遍地輸入「os.path.join(a, b)」了。

如果「pathlib」所做的就這么多,它也已經(jīng)是對于 Python 的一個很好的補充了。但是,它還能做更多!

例如,我們可以在無需打開和關(guān)閉文件的情況下,讀取文本文件的內(nèi)容:

from pathlib import Path 
data_folder = Path("source_data/text_files/") 
file_to_open = data_folder / "raw_data.txt" 
print(file_to_open.read_text()) 

專業(yè)提示:之前的示例是有 Bug 的,因為打開的文件從來沒有被關(guān)閉過。而這里的這種語法則徹底避免了這個 Bug。

事實上,「pathlib」使大多數(shù)標(biāo)準(zhǔn)的文件操作變得快速而簡單:

from pathlib import Path 
filename = Path("source_data/text_files/raw_data.txt") 
print(filename.name) 
# prints "raw_data.txt" 
print(filename.suffix) 
# prints "txt" 
print(filename.stem) 
# prints "raw_data" 
if not filename.exists(): 
 print("Oops, file doesn't exist!") 
else: 
 print("Yay, the file exists!") 

  

你甚至可以使用「pathlib」顯式地將一個「Unix」路徑轉(zhuǎn)化為一個「Windows」格式的路徑:

from pathlib import Path, PureWindowsPath 
filename = Path("source_data/text_files/raw_data.txt") 
# Convert path to Windows format 
path_on_windows = PureWindowsPath(filename) 
print(path_on_windows) 
# prints "source_data\text_files\raw_data.txt" 

如果你真的想安全地在你的代碼中使用反斜杠,你可以按照「Windows」格式聲明你的路徑,而「pathlib」可以對其進(jìn)行轉(zhuǎn)化,使其能在當(dāng)前的操作系統(tǒng)中工作:

from pathlib import Path, PureWindowsPath 
# I've explicitly declared my path as being in Windows format, so I can use forward slashes in it. 
filename = PureWindowsPath("source_data\\text_files\\raw_data.txt") 
# Convert path to the right format for the current operating system 
correct_path = Path(filename) 
print(correct_path) 
# prints "source_data/text_files/raw_data.txt" on Mac and Linux 
# prints "source_data\text_files\raw_data.txt" on Windows 

如果你想把代碼寫得更「高級」一些,你甚至可以使用「pathlib」來做諸如解析相對路徑、解析網(wǎng)絡(luò)共享路徑并生成

「file:// urls」之類的事。在下面的例子中,我們將僅僅使用兩行代碼,在你的 web 瀏覽器中打開一個本地文件夾:

from pathlib import Path 
import webbrowser 
filename = Path("source_data/text_files/raw_data.txt") 
webbrowser.open(filename.absolute().as_uri()) 

這只是「pathlib」的好處之一。它很好地替代了過去分散在不同 Python 模塊中與文件相關(guān)的許多不同功能。

總結(jié)

以上所述是小編給大家介紹的使用Python解決Windows文件名非用反斜杠問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • IDEA中g(shù)it撤回上一次push的方法(指定回到某個版本)

    IDEA中g(shù)it撤回上一次push的方法(指定回到某個版本)

    這篇文章主要介紹了IDEA中g(shù)it撤回上一次push(指定回到某個版本),本文通過場景圖文的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Vscode 基礎(chǔ)使用教程大全

    Vscode 基礎(chǔ)使用教程大全

    本文給大家匯總介紹了一些vscode開始使用的過程中需要用到的基礎(chǔ)的操作教程,非常簡單實用,希望對大家熟練掌握vscode能夠有所幫助
    2020-01-01
  • Hash算法示例應(yīng)用場景解延伸探究

    Hash算法示例應(yīng)用場景解延伸探究

    這篇文章主要為大家介紹了Hash算法示例應(yīng)用場景解延伸探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • sqoop如何指定pg庫的模式(方法詳解)

    sqoop如何指定pg庫的模式(方法詳解)

    sqoop是一個用來將hadoop中hdfs和關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)相互遷移的工具,可以將一個關(guān)系型數(shù)據(jù)庫(mysql、oracle等)中的數(shù)據(jù)導(dǎo)入到hadoop的hdfs中,也可以將hdfs的數(shù)據(jù)導(dǎo)入到關(guān)系型數(shù)據(jù)庫中,本文給大家介紹sqoop如何指定pg庫的模式,一起看看吧
    2022-01-01
  • pycharm中venv文件夾自定義處理方式圖解

    pycharm中venv文件夾自定義處理方式圖解

    這篇文章主要為大家介紹了pycharm中venv文件夾自定義處理方式圖解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 12種最常用的網(wǎng)頁編程語言簡介(值得收藏)

    12種最常用的網(wǎng)頁編程語言簡介(值得收藏)

    隨著網(wǎng)站的越來越普及,與Web相關(guān)的開發(fā)技術(shù)持續(xù)熱門,從開始簡單的html到復(fù)雜的web開發(fā)語言asp、asp.net、php、jsp等等,在此,我就借助SEO馬龍博客的平臺跟大家簡單的介紹一下常見的12種網(wǎng)頁編程語言
    2017-01-01
  • 瀏覽器關(guān)閉使session失效的問題多種解決方式

    瀏覽器關(guān)閉使session失效的問題多種解決方式

    直接關(guān)閉瀏覽器(或者強(qiáng)制關(guān)閉瀏覽器進(jìn)程、死機(jī)等),服務(wù)器無法處理用戶退出網(wǎng)站的請求,此舉將會導(dǎo)致session失效,下面整理了一些解決方法,感興趣的朋友可以參考下哈
    2013-07-07
  • git clone 子模塊沒下載全的問題解決

    git clone 子模塊沒下載全的問題解決

    這篇文章主要介紹了git clone 子模塊沒下載全的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Git中恢復(fù)已刪除分支的幾種方法

    Git中恢復(fù)已刪除分支的幾種方法

    這篇文章主要介紹了在Git中恢復(fù)已刪除分支的幾種方法,包括查找提交記錄、恢復(fù)分支、推送恢復(fù)的分支等步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • linux?部署apache服務(wù)的步驟

    linux?部署apache服務(wù)的步驟

    這篇文章主要介紹了linux部署apache服務(wù)的步驟,部署apache服務(wù)的步驟本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-02-02

最新評論

马鞍山市| 浮山县| 英超| 犍为县| 酉阳| 黑山县| 健康| 共和县| 城口县| 安多县| 班戈县| 鲁甸县| 榕江县| 安丘市| 柳林县| 曲靖市| 荆州市| 新绛县| 乡城县| 建德市| 巴林左旗| 万源市| 苏州市| 环江| 峡江县| 昌图县| 保康县| 花莲市| 清流县| 北京市| 卫辉市| 察隅县| 浦城县| 苗栗县| 莆田市| 钦州市| 共和县| 繁峙县| 郯城县| 龙山县| 龙里县|