網站首頁 編程語言 正文
一、os模塊
1、方法大綱
2、常用方法
方法 | 描述 |
---|---|
getcwd() | 獲取當前工作目錄 |
chdir(path) | 將當前的工作目錄更改為指定的路徑 |
listdir(path=None) | 列出指定目錄中的文件名。如果 path 為 None,則使用 path=‘.’。 |
mkdir(path, mode=511, *, dir_fd=None) | 創建目錄 |
makedirs(name, mode=511, exist_ok=False) | 遞歸創建多層目錄 |
rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) | 重命名文件或目錄 |
remove(path, *, dir_fd=None) | 刪除文件 |
rmdir(path, *, dir_fd=None) | 刪除目錄 |
removedirs(name) | 遞歸刪除目錄,從子目錄到父目錄逐層嘗試刪除,遇到目錄非空拋出異常。 |
walk(top, topdown=True, onerror=None, followlinks=False) | 遍歷 top 路徑下的所有子目錄,返回一個包含 3 個元素的元組:(dirpath, dirnames, filenames)。 |
os.curdir | 指代當前目錄(‘.’) |
os.pardir | 指代上一級目錄(‘…’) |
os.sep | 路徑分割符(Windows 為 ‘\’,Linux 為 ‘/’) |
os.linesep | 行終止符(Windows 為 ‘\r\n’,Linux 為 ‘\n’) |
os.name | 指代當前使用的操作系統(Windows 系統為 ‘nt’,Linux 為 ‘posix’) |
二、glob模塊
1、方法大綱
glob模塊也是Python標準庫中一個重要的模塊,主要用來查找符合特定規則的目錄和文件,并將搜索的到的結果返回到一個列表中。使用這個模塊最主要的原因就是,該模塊支持幾個特殊的正則通配符,用起來賊方便,這個將會在下方為大家進行詳細講解。
2、使用示例
import glob path1 = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a\[0-9].png" print(glob.glob(path1)) path2 = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a\[0-9a-z].*" print(glob.glob(path2))
注意:這個函數里面還有一個參數,recursive
,當其為真時,則模式’**'將與任何文件匹配,并且
零或更多目錄和子目錄。
三、shutil模塊
1、方法大綱
os模塊是Python標準庫中一個重要的模塊,里面提供了對目錄和文件的一般常用操作。而Python另外一個標準庫——shutil模塊,它作為os模塊的補充,提供了復制、移動、刪除、壓縮、解壓等操作,這些 os 模塊中一般是沒有提供的。但是需要注意的是:shutil模塊對壓縮包的處理是調用ZipFile
和TarFile
這兩個模塊來進行的。
2、壓縮包
對壓縮包管理是使用zipfile
模塊
import zipfile import os file_list = os.listdir(os.getcwd()) # 獲取當前目錄 # 將上述所有文件,進行打包,使用“w” with zipfile.ZipFile(r"我創建的壓縮包.zip", "w") as zipobj: # 對文件進行壓縮 for file in file_list: zipobj.write(file) # 將文件寫入壓縮包中
四、pathlib模塊
1、對比圖
操作 | os and os.path | pathlib |
---|---|---|
絕對路徑 | os.path.abspath | Path.resolve |
修改權限 | os.chmod | Path.chmod |
創建目錄 | os.mkdir | Path.mkdir |
重命名 | os.rename | Path.rename |
移動 | os.replace | Path.replace |
刪除目錄 | os.rmdir | Path.rmdir |
刪除文件 | os.remove, os.unlink | Path.unlink |
工作目錄 | os.getcwd | Path.cwd |
是否存在 | os.path.exists | Path.exists |
用戶目錄 | os.path.expanduser | Path.expanduser and Path.home |
是否為目錄 | os.path.isdir | Path.is_dir |
是否為文件 | os.path.isfile | Path.is_file |
是否為連接 | os.path.islink | Path.is_symlink |
文件屬性 | os.stat | Path.stat, Path.owner, Path.group |
是否為絕對路徑 | os.path.isabs | PurePath.is_absolute |
路徑拼接 | os.path.join | PurePath.joinpath |
文件名 | os.path.basename | PurePath.name |
上級目錄 | os.path.dirname | PurePath.parent |
同名文件 | os.path.samefile | Path.samefile |
后綴 | os.path.splitext | PurePath.suffix |
2、路徑獲取
獲取當前工作目錄
import pathlib print(pathlib.Path.cwd()) # 雖然在這里打印出來的很像一個字符串,但實際上得到的是一個WindowsPath對象 # 其實現了 __repr__ 和 __str__ 底層方法 print(pathlib.Path(__file__)) # 獲取當前文件路徑
工作目錄是在哪個目錄下運行你的程序,不是項目目錄
獲取家目錄
import pathlib print(pathlib.Path.home()) # 獲取當前用戶的家目錄
獲取文件絕對路徑
from pathlib import Path # 當前文件路徑 p = Path(__file__) print(p) print(p.absolute()) # 將路徑轉換為絕對路徑,p.resolve()功能也是一樣的
遍歷當前目錄
from pathlib import Path # 當前文件路徑 p = Path('files') for i in p.iterdir(): print(i.absolute())
"""運行結果:
C:\Users\3500\PycharmProjects\untitled3\demo\files\json
C:\Users\3500\PycharmProjects\untitled3\demo\files\username.txt
C:\Users\3500\PycharmProjects\untitled3\demo\files\yaml
"""
3、文件屬性
from pathlib import Path # 當前文件路徑 p = Path(__file__) print(p.absolute()) # 獲取絕對路徑 print(p.resolve()) # 獲取絕對路徑 print(p.name) # 獲取文件名稱 'test.py' print(p.stem) # 只要文件名,不要后綴 test print(p.suffix) # 獲取文件 后綴.py print(p.suffixes) # 文件所有的后綴 ['.py'] print(p.parts) # 拆分('C:\\', 'Users', '3500', 'PycharmProjects', 'untitled3', 'demo', 'test.py') print(p.parent) # 獲取當前路徑的父級目錄,C:\Users\35000\PycharmProjects\untitled3\demo print(p.parent.parent) # C:\Users\3500\PycharmProjects\untitled3 print(p.parents) # 所有的父級 <WindowsPath.parents> print(p.anchor) # 錨,目錄前面的部分 C:\ 或者 /
4、文件判斷
from pathlib import Path # 1. is_file() 判斷是不是文件 print(Path.cwd().is_file()) # False # 2. is_dir() 判斷是不是文件夾 print(Path.cwd().is_dir()) # True # exists() 判斷文件是否存在 p = Path('./data.json') print(p.exists()) # True or False from pathlib import Path # 當前文件路徑 p = Path(__file__) # 獲取當前文件的路徑 print(p.is_absolute()) # True
5、路徑拼接
from pathlib import Path # 當前文件路徑 p = Path('./') print(p.absolute()) # C:\Users\3500\PycharmProjects\untitled3\demo print(p.joinpath('data.json')) # data.json print(p.joinpath('data.json').absolute()) # C:\Users\3500\PycharmProjects\untitled3\demo\data.json # 拼接多層 print(p.joinpath('files', 'data.json')) # files\data.json print(p.joinpath('files', 'data.json').absolute()) # C:\Users\3500\PycharmProjects\untitled3\demo\files\data.json
6、正則匹配
使用模式匹配(正則表達式)匹配指定的路徑。glob 只會匹配當前目錄下, rglob 會遞歸所有子目錄
比如在當前腳本的 files 目錄有以下文件夾和子文件
from pathlib import Path p = Path('files') # glob 只會遍歷查找當前目錄 print(p.glob('*.txt')) # <generator object Path.glob at 0x000001A44565A518> print([i for i in p.glob('*.txt')]) # [WindowsPath('files/username.txt')] print([i for i in p.glob('*.yml')]) # [] # rglob 只會遍歷查找當前目錄以及其子目錄 print(p.rglob('*.txt')) # <generator object Path.glob at 0x000001A44565A518> print([i for i in p.rglob('*.txt')]) # [WindowsPath('files/username.txt')] print([i for i in p.rglob('*.yml')]) # [WindowsPath('files/yaml/aa.yml'), WindowsPath('files/yaml/bb.yml')] p_ = Path('data.json') # math 檢查匹配規則 print(p_.match('*.json')) # True
7、讀寫操作
pathlib 對讀取和寫入進行了簡單的封裝,不再需要重復去打開文件和管理文件的關閉了。
-
.read_text()
讀取文本 -
.read_bytes()
讀取 bytes -
.write_text()
寫入文本 -
.write_bytes()
寫入 tytes
from pathlib import Path p = Path('yo.txt') p.write_text("hello world") print(p.read_text()) # hello world
file.write
操作使用的是 w 模式,如果之前已經有文件內容,將會被覆蓋。
當然,pathlib
還可以進行文件的創建,刪除,以及修改操作,其與os
中的方法一樣,可以自行去研究
原文鏈接:https://blog.csdn.net/qq_62789540/article/details/126445344
相關推薦
- 2022-07-22 Idea操作普通項目變為maven項目
- 2022-01-12 nvm安裝步驟及各種避坑指南&nvm安裝node-v沒反應&npm,yarn用不了
- 2023-11-13 linux平臺下ZeroMQ zmq(C++)編譯安裝以及調用
- 2022-07-13 SpringBoot中的SmartInitializingSingleton接口的使用
- 2022-08-16 .Net使用Xunit工具進行單元測試_實用技巧
- 2023-07-07 使用python sdk添加刪除阿里云pvc路由
- 2022-06-12 GO語言中常見的排序算法使用示例_Golang
- 2022-11-09 React特征Form?單向數據流示例詳解_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支