亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Python > 正文

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

2024-07-21 02:03:09
字體:
來源:轉載
供稿:網友

 

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

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

這是由于上世紀 80 年代早期計算機歷史上的一個小意外?!窶S-DOS」的第一版使用了正斜杠字符來指定命令行選項。當微軟在「MS-DOS 2.0」中加入了對文件夾的支持時,正斜杠字符已經被使用了,所以他們采用了反斜杠作為替代。35 年后,我們仍然被受困于這種不一致性。

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

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

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

錯誤的解決方案:手動構建文件路徑

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

 

在 Python 中對其進行編碼是「錯誤」的方式:

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

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

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

Python 對混合斜杠類型的支持是一種只針對 Windows 的「黑客」技術,它反過來并不起作用。在 Mac 系統環境下,在代碼中使用反斜杠會導致徹底失?。?/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' 

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

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

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

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

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」系統上完美運行。問題是它使用起來很麻煩。寫出「os.path.join()」并將路徑的每個部分作為獨立的字符串傳給該函數非常冗長,而且很不直觀。

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

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

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

要使用該庫,你只需使用正斜杠將一個路徑或文件名傳給一個新的「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()) 

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

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

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

例如,我們可以在無需打開和關閉文件的情況下,讀取文本文件的內容:

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()) 

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

事實上,「pathlib」使大多數標準的文件操作變得快速而簡單:

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」路徑轉化為一個「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」可以對其進行轉化,使其能在當前的操作系統中工作:

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」來做諸如解析相對路徑、解析網絡共享路徑并生成

「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 模塊中與文件相關的許多不同功能。

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美wwwwww| 精品中文字幕在线2019| 黑人巨大精品欧美一区二区一视频| 国产一区红桃视频| 欧美日韩国产区| 国产精品人成电影在线观看| 欧美www在线| 免费av在线一区| 精品亚洲永久免费精品| 国产一区二区三区久久精品| 日韩成人激情视频| 日韩av在线看| 精品久久久香蕉免费精品视频| 欧美成人黑人xx视频免费观看| 97在线观看免费高清| 久久久成人精品视频| 欧美日韩中文字幕| 色噜噜亚洲精品中文字幕| 欧美一级在线亚洲天堂| 日韩有码在线视频| 国产精品国产亚洲伊人久久| 亚洲成人xxx| 久久久人成影片一区二区三区| 国产精品一区二区三| 日韩大陆欧美高清视频区| 亚洲一区亚洲二区亚洲三区| 欧美性猛交xxxx免费看漫画| 国产亚洲欧洲高清| 日韩国产欧美精品一区二区三区| 国产一区二区三区久久精品| 国产精品96久久久久久| 日韩av一区二区在线| 色综久久综合桃花网| 国产精品一区二区av影院萌芽| 日韩av在线免费观看一区| 日韩欧美综合在线视频| 欧美电影免费在线观看| 热久久99这里有精品| 欧美日韩在线视频一区| 92福利视频午夜1000合集在线观看| 日本精品视频在线播放| 亚洲精品一区二区三区婷婷月| 国产亚洲人成a一在线v站| 欧美黄色片在线观看| 欧美日韩一区二区免费视频| 久久久久久一区二区三区| 久久精品国产成人| 韩剧1988免费观看全集| 国产成人黄色av| 亚洲r级在线观看| 亚洲网站在线看| 日韩精品在线观看一区| 欧美性生交xxxxx久久久| 成人福利免费观看| 日韩在线www| 欧美性在线视频| 国产精品成人aaaaa网站| 日韩h在线观看| 国产99久久久欧美黑人| 久操成人在线视频| 成人激情电影一区二区| 欧美成人午夜激情在线| 一区二区三区日韩在线| 亚洲天堂网站在线观看视频| 韩国一区二区电影| 九九久久久久99精品| 亚洲一区二区久久久久久| 欧美激情一区二区三级高清视频| 欧美大肥婆大肥bbbbb| 欧美在线视频网站| 一本色道久久综合亚洲精品小说| 欧美区在线播放| 亚洲精品国产品国语在线| 国产精品久久久久影院日本| 亚洲天堂男人天堂| 亚洲欧美综合精品久久成人| 久久夜精品香蕉| 成人黄色午夜影院| 国产女精品视频网站免费| 国产精品自产拍在线观| 奇米一区二区三区四区久久| 欧美精品18videos性欧| 91久久久久久久久久| 成人欧美在线视频| 大胆人体色综合| 欧美黄色三级网站| 96sao精品视频在线观看| 国产成人拍精品视频午夜网站| 成人xxxx视频| 国产精品久久久久久久久久免费| 69久久夜色精品国产7777| 中文字幕免费精品一区高清| 亚洲精品mp4| 国产精品久久二区| 在线亚洲午夜片av大片| 最近中文字幕日韩精品| 欧美黑人又粗大| 亚洲男人的天堂在线播放| 亚洲一区二区三区久久| www.午夜精品| 91久久精品美女| 欧美一级淫片丝袜脚交| 国产成人久久久精品一区| 精品人伦一区二区三区蜜桃网站| 国产精品入口日韩视频大尺度| 国产精品一二三在线| 国产精品揄拍一区二区| 懂色aⅴ精品一区二区三区蜜月| 精品爽片免费看久久| 欧美性猛交xxxx免费看漫画| 91大神在线播放精品| 亚洲欧美国产一区二区三区| 国产成人+综合亚洲+天堂| 精品国产鲁一鲁一区二区张丽| 久久久999精品免费| 欧美色欧美亚洲高清在线视频| 色青青草原桃花久久综合| 奇米四色中文综合久久| 91中文字幕在线观看| 亚洲国产97在线精品一区| 国产精品日韩精品| 成人免费看吃奶视频网站| 国产一区二区三区在线观看网站| 国模精品一区二区三区色天香| 97精品欧美一区二区三区| 亚洲激情在线观看视频免费| 成人av番号网| 日韩国产精品视频| 国产美女扒开尿口久久久| 欧美国产视频一区二区| 欧美亚洲国产日本| 一区三区二区视频| 91在线观看免费| 日韩一级裸体免费视频| 日韩亚洲欧美成人| 国产精品久久久久久久久久久久| 久久综合国产精品台湾中文娱乐网| 亚洲自拍偷拍一区| 国产成人精品日本亚洲| 欧美精品激情在线观看| 色偷偷噜噜噜亚洲男人的天堂| 久久久电影免费观看完整版| 欧美丝袜一区二区三区| 国产视频精品xxxx| 欧美美女18p| 欧美专区中文字幕| 色狠狠久久aa北条麻妃| 性色av一区二区三区在线观看| 在线视频亚洲欧美| 日韩视频永久免费观看| 国模视频一区二区| 久久久精品免费视频| 亚洲福利在线播放| 亚洲精品大尺度| 美女黄色丝袜一区| 久久成人综合视频| 欧美体内谢she精2性欧美| 国产精品精品久久久| 国产综合在线看| 亚洲精品自产拍| 亚洲精品国精品久久99热| 日本韩国欧美精品大片卡二| 91麻豆国产精品| 日韩精品视频在线观看网址|