日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

還在使用 os.path?Python 中的 Pathlib 太香了

來源: 責編: 時間:2023-11-14 09:09:50 297觀看
導讀寫在前面相信現在依然有很多人習慣于使用os來處理文件/文件夾/路徑等,但其實Python自帶的Pathlib庫處理這些更優雅、更安全,你會發現很多大型開源項目都在使用它,那么它到底有什么魅力?花點時間讓我們一起看看吧!先看這個

r7v28資訊網——每日最新資訊28at.com

寫在前面

相信現在依然有很多人習慣于使用os來處理文件/文件夾/路徑等,但其實Python自帶的Pathlib庫處理這些更優雅、更安全,你會發現很多大型開源項目都在使用它,那么它到底有什么魅力?花點時間讓我們一起看看吧!r7v28資訊網——每日最新資訊28at.com

先看這個引例,假設我們需要獲取某個文件夾下所有的txt文件,基于os會寫成如下形式:r7v28資訊網——每日最新資訊28at.com

import osdir_path = "/home/user/documents"# Find all text files inside a directoryfiles = [os.path.join(dir_path, f) for f in os.listdir(dir_path) if os.path.isfile(os.path.join(dir_path, f)) and f.endswith(".txt")]

使用Pathlib則變成如下形式,是不是心動了:r7v28資訊網——每日最新資訊28at.com

from pathlib import Pathdir_path = Path("/home/user/documents")files = list(dir_path.glob("*.txt"))

os.path 的最大缺點是將系統路徑視為字符串,極容易導致混亂,Pathlib 在Python3.4中被支持, 通過將路徑表示為獨特的對象解決了這個問題,并為路徑處理引入更多可擴展用法,許多操作在os需要層層嵌套,而Pathlib將使開發人員更輕松地處理與路徑和文件相關的所有事情。r7v28資訊網——每日最新資訊28at.com

處理路徑

1.創建路徑

幾乎所有pathlib 的功能都可以通過其 Path 子類訪問,可以使用該類創建文件和目錄,有多種初始化Path的方式,比如,使用當前工作路徑:r7v28資訊網——每日最新資訊28at.com

from pathlib import PathPath.cwd() # PosixPath('/home/user/Downloads')

使用home:r7v28資訊網——每日最新資訊28at.com

Path.home() # PosixPath('/home/user')

同樣的可以指定字符串路徑創建路徑:r7v28資訊網——每日最新資訊28at.com

p = Path("documents") # PosixPath('documents')

使用正斜杠運算符進行路徑連接:r7v28資訊網——每日最新資訊28at.com

data_dir = Path(".") / "data"csv_file = data_dir / "file.csv"print(data_dir) # dataprint(csv_file) # data/file.csv

檢查路徑是否存在,可以使用布爾函數 exists:r7v28資訊網——每日最新資訊28at.com

data_dir.exists() 

data_dir.exists()檢查文件是否存在:r7v28資訊網——每日最新資訊28at.com

csv_file.exists()

csv_file.exists()使用 is_dir 或 is_file 函數來檢查是否為文件夾、文件:r7v28資訊網——每日最新資訊28at.com

data_dir.is_dir()
csv_file.is_file()

大多數路徑都與當前運行目錄相關,但某些情況下必須提供文件或目錄的絕對路徑,可以使用 absoluter7v28資訊網——每日最新資訊28at.com

csv_file.absolute() # PosixPath('/home/user/Downloads/data/file.csv')

如果仍然需要將路徑轉為字符串,可以調用 str(path) 強制轉換:r7v28資訊網——每日最新資訊28at.com

str(Path.home()) # '/home/user'

現如今大多數庫都支持 Path 對象,包括 sklearn 、 pandas 、 matplotlib 、 seaborn 等。r7v28資訊網——每日最新資訊28at.com

2.Path屬性

Path 對象有許多有用屬性,一起來看看這些示例,首先定義一個圖片路徑:r7v28資訊網——每日最新資訊28at.com

image_file = Path("images/shadousheng.png").absolute() # PosixPath('/home/user/Downloads/images/midjourney.png')

先從 parent 開始,它將返回當前工作目錄的上一級:r7v28資訊網——每日最新資訊28at.com

image_file.parent # PosixPath('/home/user/Downloads/images')

獲取文件名:r7v28資訊網——每日最新資訊28at.com

image_file.name # 'shadousheng.png'

它將返回帶有后綴的文件名,若只想要前綴,則使用stem:r7v28資訊網——每日最新資訊28at.com

image_file.stem # shadousheng

只想要后綴也很簡單:r7v28資訊網——每日最新資訊28at.com

image_file.suffix # '.png'

image_file.suffix # '.png'如果要將路徑分成多個部分,可以使用 parts:r7v28資訊網——每日最新資訊28at.com

image_file.parts # ('/', 'home', 'user', 'Downloads', 'images', 'shadousheng.png')

如果希望這些組件本身就是 Path 對象,可以使用 parents 屬性,它會創建一個生成器r7v28資訊網——每日最新資訊28at.com

for i in image_file.parents:    print(i)# /home/user/Downloads/images# /home/user/Downloads# /home/user# /home# /

3.處理文件

想要創建文件并寫入內容,不必再使用 open 函數,只需創建一個 Path 對象搭配 write_text 或 write_btyes 即可:r7v28資訊網——每日最新資訊28at.com

markdown = data_dir / "file.md"# Create (override) and write textmarkdown.write_text("# This is a test markdown")

讀取文件,可以 read_text 或 read_bytes:r7v28資訊網——每日最新資訊28at.com

markdown.read_text() # '# This is a test markdown'
len(image_file.read_bytes()) # 1962148

但請注意, write_text 或 write_bytes 會覆蓋文件的現有內容:r7v28資訊網——每日最新資訊28at.com

# Write new text to existing filemarkdown.write_text("## This is a new line")
# The file is overriddenmarkdown.read_text() # '## This is a new line'

要將新信息附加到現有文件,應該在 a (附加)模式下使用 Path 對象的 open 方法:r7v28資訊網——每日最新資訊28at.com

# Append textwith markdown.open(mode="a") as file:    file.write("/n### This is the second line")markdown.read_text() # '## This is a new line/n### This is the second line'

使用rename 重命名文件,如在當前目錄中重命名,file.md 變成了 new_markdown.md:r7v28資訊網——每日最新資訊28at.com

renamed_md = markdown.with_stem("new_markdown")markdown.rename(renamed_md) # PosixPath('data/new_markdown.md')

通過 stat().st_size 查看文件大小:r7v28資訊網——每日最新資訊28at.com

# Display file sizerenamed_md.stat().st_size # 49

查看最后一次修改文件的時間:r7v28資訊網——每日最新資訊28at.com

from datetime import datetimemodified_timestamp = renamed_md.stat().st_mtimedatetime.fromtimestamp(modified_timestamp) # datetime.datetime(2023, 8, 1, 13, 32, 45, 542693)

st_mtime 返回一個自 1970 年 1 月 1 日以來的秒數。為了使其可讀,搭配使用 datatime 的 fromtimestamp 函數。r7v28資訊網——每日最新資訊28at.com

要刪除不需要的文件,可以 unlink:r7v28資訊網——每日最新資訊28at.com

renamed_md.unlink(missing_ok=True)

如果文件不存在,將 missing_ok 設置為 True 則不會引起報錯r7v28資訊網——每日最新資訊28at.com

4.處理目錄

首先,看看如何遞歸創建目錄:r7v28資訊網——每日最新資訊28at.com

new_dir.mkdir(parents=True, exist_ok=True)

默認情況下, mkdir 創建給定路徑的最后一個子目錄,如果中間父級不存在,則必須將 parents 設置為 True 達到遞歸創建目的。r7v28資訊網——每日最新資訊28at.com

要刪除目錄,可以使用 rmdir ,如果給定的路徑對象是嵌套的,則僅刪除最后一個子目錄:r7v28資訊網——每日最新資訊28at.com

new_dir.rmdir()

要在終端上列出 ls 等目錄的內容,可以使用 iterdir 。結果將是一個生成器對象,一次生成一個子內容作為單獨的路徑對象,和os.listdir不同的是,它返回每個內容的絕對路徑而不是名字:r7v28資訊網——每日最新資訊28at.com

for p in Path.home().iterdir():    print(p)# /home/user/anaconda3# /home/user/.googleearth# /home/user/.zcompdump# /home/user/.ipython# /home/user/.bashrc

要捕獲具有特定擴展名或名稱的所有文件,可以將 glob 函數與正則表達式結合使用。r7v28資訊網——每日最新資訊28at.com

例如,使用 glob("*.txt") 查找主目錄中所有文本文件:r7v28資訊網——每日最新資訊28at.com

home = Path.home()text_files = list(home.glob("*.txt"))len(text_files) # 3

要遞歸搜索文本文件(即在所有子目錄中),可以glob 與 rglob 結合使用:r7v28資訊網——每日最新資訊28at.com

all_text_files = [p for p in home.rglob("*.txt")]len(all_text_files) # 5116

以上就是Pathlib中常用方法。r7v28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-24305-0.html還在使用 os.path?Python 中的 Pathlib 太香了

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 深入了解Python數據類型及應用

下一篇: 七個開源免費的低代碼/無代碼后端項目

標簽:
  • 熱門焦點
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 量化指標是與非:挽救被量化指標扼殺的技術團隊

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術總監劉新翠在WOT2023大會上的主題分享,更多精彩內容及現場PPT,請關注51CTO技術棧公眾號,發消息【WOT2023PPT】即可直接領取
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起“馮提莫”這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的“斗魚一姐”,馮提莫在游戲直播的年代影響力不輸于現
  • 四年持續更迭堅持探索行業無人之境,HarmonyOS 4帶來五大升級多項創新

    除了華為每年新發布的旗艦手機系列,上億花粉更加期待鴻蒙系統每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式發布,這也是該系統歷經四年的再
  • 機構稱Q2國內智能手機銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據市場調查機構Counterpoint Research公布的最新報告,2023年第2季度中國智能手機銷量同比下降4%,創新自2014年以來第2季度銷量新低。報
  • iQOO 11S屏幕細節公布:首發三星2K E6全感屏 安卓最好的直屏手機

    日前iQOO手機官方宣布,新一代電競旗艦iQOO 11S將會在7月4日19:00正式與大家見面。隨著發布時間的日益臨近,官方關于該機的預熱也更加密集,截至目前已
Top 主站蜘蛛池模板: 贵州省| 嫩江县| 嵩明县| 克拉玛依市| 桐梓县| 肃宁县| 康保县| 安康市| 双峰县| 云梦县| 精河县| 青州市| 麻阳| 凤山县| 洪洞县| 射阳县| 江川县| 尖扎县| 垣曲县| 肥乡县| 临城县| 边坝县| 裕民县| 双桥区| 蓬溪县| 探索| 双柏县| 江安县| 临颍县| 乌拉特中旗| 宁波市| 青龙| 商洛市| 铜山县| 额济纳旗| 洛川县| 广饶县| 文化| 禹城市| 江华| 屯留县|