<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
顧名思義,OS表示Operating System,即作業系統。OS標準庫是一個作業系統介面模組,提供一些方便使用作業系統相關功能的函數,具體安裝位置可通過匯入os模組檢視os.__file__
屬性得到。當需要在Python程式碼中呼叫OS相關功能實現業務邏輯或者無法直接使用命令列工具時,我們就需要考慮匯入此模組,因此有必要進行深入學習。
2.1.1 os.getcwd()
返回表示當前工作目錄的字串
print("當前工作目錄為:{}".format(os.getcwd())) # 返回當前工作目錄
2.1.2 os.mkdir(path, mode=0o777, *, dir_fd=None)
以指定數位表示的許可權模式mode建立一個名為path的目錄。某些系統會忽略 mode,如果沒有忽略,那麼Linux系統來說,新建資料夾的許可權=指定數位表示的許可權模式mode-當前系統使用者的umask預設許可權,如下所示
""" Linux作業系統可通過umask命令獲得4個八進位制數表示的預設許可權,root使用者預設是0022,普通使用者預設是 0002 第1位數代表檔案所具有的特殊許可權(SetUID、SetGID、Sticky BIT),後3位數表示表示umask許可權值 分別對應所有者、使用者組、其他人的許可權值,許可權與數位對應關係為:r->4,w->2,x->1 """ exit_code=os.system("umask")
""" 資料夾模式mode賦值為十進位制511,等價於八進位制0o777 """ set_mode=511 os.mkdir(path="./cyr",mode=set_mode) # 在當前目錄建立名為cyr的資料夾
# 長格式檢視新建立的資料夾cyr可知其許可權字串為rwxr-xr-x,等價於轉換後的數位許可權111101101 !ls -l | grep cyr
umask_value=0o0022 # 當前系統使用者八進位製表示umask預設許可權 new_dir_mode=set_mode-umask_value print("新建資料夾的許可權為:{:b}".format(new_dir_mode))
os.rmdir(path, *, dir_fd=None)
移除(刪除)目錄 path。如果目錄不存在或不為空,則會分別丟擲 FileNotFoundError
或 OSError
異常。
os.rmdir("./cyr") # 刪除空資料夾成功,無法查到cyr目錄 !ls | grep cyr
os.rmdir("./why") # 刪除不存在的資料夾FileNotFoundError報錯
os.rmdir("./nnunet/") # 刪除不為空資料夾OSError報錯
os.chdir(path)
將當前工作目錄更改為 path
print("切換前的當前工作目錄為:{}".format(os.getcwd())) # 返回當前工作目錄 dst_path="/root" # 目標資料夾 os.chdir(dst_path) # 將當前工作目錄切換為/root print("切換後的當前工作目錄為:{}".format(os.getcwd())) # 返回當前工作目錄
os.listdir(path='.')
返回一個包含指定path下所有檔案和目錄名稱的按任意順序排列的列表,特殊條目’.‘和’…'除外
dst_path="/code/" # 目標目錄 dirs_ls=os.listdir(path=dst_path) # 獲得指定目錄下全部檔案和資料夾名稱列表 print(dirs_ls)
2.2.1 os.path.abspath(path)
返回路徑path 的絕對路徑(標準化的),相當於字串拼接,路徑path不存在也不會報錯
relative_path="tests/test_steps_for_sliding_window_prediction.py" # 路徑path存在 print("{}對應的絕對路徑為{}".format(relative_path,os.path.abspath(relative_path)))
no_path="tests/none.py" # 路徑path不存在 print("{}對應的絕對路徑為{}".format(relative_path,os.path.abspath(no_path)))
2.2.2 os.path.basename(path)
返回路徑 path 的基本名稱
full_pathname="/proc/bus/pci/3a/08.0" # 路徑path存在 print("全路徑名稱對應的檔名為{}".format(os.path.basename(full_pathname)))
no_full_pathname="/demo/none.cpp" # 路徑path不存在 print("全路徑名稱對應的檔名為{}".format(os.path.basename(no_full_pathname)))
2.2.3 os.path.dirname(path)
返回路徑 path 的目錄名稱
full_pathname="/proc/bus/pci/3a/08.0" # 路徑path存在 print("全路徑名稱對應的目錄名稱為{}".format(os.path.dirname(full_pathname)))
no_full_pathname="/demo/none.cpp" # 路徑path不存在 print("全路徑名稱對應的目錄名稱為{}".format(os.path.dirname(no_full_pathname)))
2.2.4 os.path.exists(path)
判斷path是否指向一個已存在路徑或已開啟的檔案描述符,存在返回True,不存在返回False
full_pathname="/proc/bus/pci/3a/08.0" # 路徑path存在 print("全路徑名稱對應的目錄是否存在?{}".format(os.path.exists(full_pathname)))
no_full_pathname="/demo/none.cpp" # 路徑path不存在 print("全路徑名稱對應的目錄是否存在?{}".format(os.path.exists(no_full_pathname)))
2.2.5 os.path.isabs(path)
判斷path是否為一個絕對路徑,是則返回True,不是或不存在則返回False。在 Unix 上,它就是以斜槓開頭,而在 Windows 上,它可以是去掉驅動器號後以斜槓(或反斜槓)開頭。
abs_pathname="/proc/bus/pci/3a/08.0" # 路徑path存在 print("全路徑名稱對應的目錄是否為絕對路徑?{}".format(os.path.isabs(abs_pathname)))
rel_pathname="./nnunet/__init__.py" # 路徑path是相對路徑 print("全路徑名稱對應的目錄是否絕對路徑?{}".format(os.path.isabs(rel_pathname)))
no_pathname="./nnunet/none.py" # 路徑path是不存在 print("全路徑名稱對應的目錄是否絕對路徑?{}".format(os.path.isabs(no_pathname)))
2.2.6 os.path.isfile(path)
若path為指向一個已存在檔案的符號連結或一個已存在檔案路徑,返回True。若path為一個資料夾路徑或不存在路徑,返回False。
ls -li /opt/conda/bin/python* # 帶inode節點資訊並長格式檢視python開頭的檔案和資料夾
由上圖可發現/opt/conda/bin/python為一個符號連結(軟連結)指向一個已存在檔案路徑/opt/conda/bin/python3.7
abs_pathname="/opt/conda/bin/python3.7" # path為一個已存在檔案路徑 print("全路徑名稱對應的檔案是否存在?{}".format(os.path.isfile(abs_pathname)))
symbolic_link="/opt/conda/bin/python" # path為指向一個已存在檔案/opt/conda/bin/python3.7的符號連結 print("全路徑名稱對應的檔案是否存在?{}".format(os.path.isfile(symbolic_link)))
abs_path="/opt/conda/bin/" # 資料夾路徑 print("全路徑名稱對應的檔案是否存在?{}".format(os.path.isfile(abs_path)))
no_full_pathname="/demo/none.cpp" # 路徑path不存在 print("全路徑名稱對應的檔案是否存在?{}".format(os.path.isfile(no_full_pathname)))
2.2.7 os.path.isdir(path)
若path為指向一個已存在資料夾的符號連結或一個已存在資料夾路徑,返回True。若path為一個檔案路徑或不存在路徑,返回False。
ls /code/nnunet/ # 檢視已存在資料夾路徑/code/nnunet/
ln -s /code/nnunet/ ./symlink2codennunet # 當前目錄即root下建立一個軟連結指向一個已存在資料夾路徑/code/nnunet/
ls -l /root/
由上圖可知root使用者主目錄下存在一個軟連結symlink2codennunet指向一個已存在資料夾路徑
exist_dir_path="/code/nnunet/"# path為一個已存在資料夾路徑 print("全路徑名稱對應的資料夾是否存在?{}".format(os.path.isdir(exist_dir_path)))
exist_dir_symlink="/root/symlink2codennunet/"# path為指向一個已存在資料夾的符號連結 print("全路徑名稱對應的資料夾是否存在?{}".format(os.path.isdir(exist_dir_symlink)))
exist_file_path="/opt/conda/bin/python3.7"# path為一個已存在檔案路徑 print("全路徑名稱對應的資料夾是否存在?{}".format(os.path.isdir(exist_file_path)))
no_path="/demo/none.cpp" # 路徑path不存在 print("全路徑名稱對應的資料夾是否存在?{}".format(os.path.isdir(no_path)))
2.2.8 os.path.islink(path)
若path代表一個已存在的符號連結,則返回True,反之則返回False。如果 Python 執行時不支援符號連結,則總是返回 False
exist_symbolic_link="/opt/conda/bin/python" # path為指向一個已存在的符號連結 print("全路徑名稱對應的符號連結是否存在?{}".format(os.path.islink(exist_symbolic_link)))
no_symbolic_link="/demo/no_link" # path為指向一個不存在的符號連結 print("全路徑名稱對應的符號連結是否存在?{}".format(os.path.islink(no_symbolic_link)))
exist_file_path="/opt/conda/bin/python3.7"# path為一個已存在檔案路徑 print("全路徑名稱對應的符號連結是否存在?{}".format(os.path.islink(exist_file_path)))
exist_dir_path="/root/"# path為一個已存在資料夾路徑 print("全路徑名稱對應的符號連結是否存在?{}".format(os.path.islink(exist_dir_path)))
2.2.9 os.path.join(path, *paths)
拼接兩個或多個路徑部分,按需要插入/
。如果引數中某個部分是絕對路徑,則絕對路徑前的路徑都將被丟棄,並從絕對路徑部分開始連線。如果最後一部分為空,則結果將以分隔符結尾。
previous_path,abs_dirname,basename,empty_part="model","/code","demo.py",""
print("引數中某個部分是絕對路徑拼接後為{}".format(os.path.join(previous_path,abs_dirname,basename)))
print("拼接兩個或多個路徑部分,按需要插入'/'拼接後為{}".format(os.path.join(previous_path,basename)))
print("最後一部分為空以分隔符結尾{}".format(os.path.join(previous_path,basename,empty_part)))
2.2.10 os.path.normcase(path)
規範路徑名稱的大小寫。 在 Windows 上,將路徑名稱中的所有字元轉為小寫,並將正斜槓轉為反斜槓。 在其他作業系統上,將路徑不加修改地返回。
Linux作業系統
print("當前作業系統模組名為:{}".format(os.name)) windows_style_path=r"C:/Usersdefaultuser0/APPData" print("Windows路徑規範化後為{}".format(os.path.normcase(windows_style_path)))
Windows作業系統
2.2.11 os.path.split(path)
將路徑 path 拆分為一對,即 (head, tail),其中,tail 是路徑的最後一部分,而 head 裡是除最後部分外的所有內容。tail 部分不會包含斜槓,如果 path 以斜槓結尾,則 tail 將為空。如果 path 中沒有斜槓,head 將為空。如果 path 為空,則 head 和 tail 均為空。head 末尾的斜槓會被去掉,除非它是根目錄(即它僅包含一個或多個斜槓)。
norm_path="/nnunet/configuration.py" # 一般路徑 ends_with_slash_path="/code/nnunet/" # 以斜槓結尾的路徑 no_slash_path="HIP_Logo.png" # 沒有斜槓的路徑 empty_path="" # 空路徑 root_path="/" # 根目錄 print("一般路徑head={},tail={}".format(*os.path.split(norm_path))) print("以斜槓結尾的路徑head={},tail={}".format(*os.path.split(ends_with_slash_path))) print("沒有斜槓的路徑head={},tail={}".format(*os.path.split(no_slash_path))) print("空路徑head={},tail={}".format(*os.path.split(empty_path))) print("根目錄head={},tail={}".format(*os.path.split(root_path)))
2.2.12 os.path.splitext(path)
將路徑 path 拆分為一對,即 (root, ext),使 root + ext == path,其中 ext 為空或以英文句點開頭,且最多包含一個句點。路徑前的句點將被忽略,例如 splitext(‘.cshrc’) 返回 (‘.cshrc’, ‘’)。
dir_path="/code/nnunet/" # 資料夾路徑 multi_dot_file_path="/code/i.thy.py" # 包含多個句點的檔案路徑 single_dot_file_path="/code/we.py" # 包含單個句點的檔案路徑 starts_with_dot_file_path=".bashrc" # 以句點開頭的路徑 print("資料夾路徑root={},ext={}".format(*os.path.splitext(dir_path))) print("包含多個句點的檔案路徑root={},ext={}".format(*os.path.splitext(multi_dot_file_path))) print("包含單個句點的檔案路徑root={},ext={}".format(*os.path.splitext(single_dot_file_path))) print("以句點開頭的路徑root={},ext={}".format(*os.path.splitext(starts_with_dot_file_path)))
2.3.1 os.name
匯入的依賴特定作業系統的模組的名稱,返回’posix’表示Linux,'nt’表示Windows,'java’表示Java虛擬機器器
print("當前作業系統平臺名稱為{}".format(os.name))
2.3.2 os.__file__
以字串形式返回os模組安裝的絕對路徑
import os print("os模組安裝絕對路徑是{}".format(os.__file__))
到此這篇關於Python標準庫os常用函數和屬性詳解的文章就介紹到這了,更多相關Python標準庫os內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45