Python四大模塊文件管理介紹
一、os模塊
1、方法大綱
2、常用方法
方法 | 描述 |
---|---|
getcwd() | 獲取當(dāng)前工作目錄 |
chdir(path) | 將當(dāng)前的工作目錄更改為指定的路徑 |
listdir(path=None) | 列出指定目錄中的文件名。如果 path 為 None,則使用 path=‘.’。 |
mkdir(path, mode=511, *, dir_fd=None) | 創(chuàng)建目錄 |
makedirs(name, mode=511, exist_ok=False) | 遞歸創(chuàng)建多層目錄 |
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 路徑下的所有子目錄,返回一個(gè)包含 3 個(gè)元素的元組:(dirpath, dirnames, filenames)。 |
os.curdir | 指代當(dāng)前目錄(‘.’) |
os.pardir | 指代上一級目錄(‘…’) |
os.sep | 路徑分割符(Windows 為 ‘\’,Linux 為 ‘/’) |
os.linesep | 行終止符(Windows 為 ‘\r\n’,Linux 為 ‘\n’) |
os.name | 指代當(dāng)前使用的操作系統(tǒng)(Windows 系統(tǒng)為 ‘nt’,Linux 為 ‘posix’) |
二、glob模塊
1、方法大綱
glob模塊也是Python標(biāo)準(zhǔn)庫中一個(gè)重要的模塊,主要用來查找符合特定規(guī)則的目錄和文件,并將搜索的到的結(jié)果返回到一個(gè)列表中。使用這個(gè)模塊最主要的原因就是,該模塊支持幾個(gè)特殊的正則通配符,用起來賊方便,這個(gè)將會(huì)在下方為大家進(jìn)行詳細(xì)講解。
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))
注意:這個(gè)函數(shù)里面還有一個(gè)參數(shù),recursive
,當(dāng)其為真時(shí),則模式’**'將與任何文件匹配,并且
零或更多目錄和子目錄。
三、shutil模塊
1、方法大綱
os模塊是Python標(biāo)準(zhǔn)庫中一個(gè)重要的模塊,里面提供了對目錄和文件的一般常用操作。而Python另外一個(gè)標(biāo)準(zhǔn)庫——shutil模塊,它作為os模塊的補(bǔ)充,提供了復(fù)制、移動(dòng)、刪除、壓縮、解壓等操作,這些 os 模塊中一般是沒有提供的。但是需要注意的是:shutil模塊對壓縮包的處理是調(diào)用ZipFile
和TarFile
這兩個(gè)模塊來進(jìn)行的。
2、壓縮包
對壓縮包管理是使用zipfile
模塊
import zipfile import os file_list = os.listdir(os.getcwd()) # 獲取當(dāng)前目錄 # 將上述所有文件,進(jìn)行打包,使用“w” with zipfile.ZipFile(r"我創(chuàng)建的壓縮包.zip", "w") as zipobj: # 對文件進(jìn)行壓縮 for file in file_list: zipobj.write(file) # 將文件寫入壓縮包中
四、pathlib模塊
1、對比圖
操作 | os and os.path | pathlib |
---|---|---|
絕對路徑 | os.path.abspath | Path.resolve |
修改權(quán)限 | os.chmod | Path.chmod |
創(chuàng)建目錄 | os.mkdir | Path.mkdir |
重命名 | os.rename | Path.rename |
移動(dòng) | 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、路徑獲取
獲取當(dāng)前工作目錄
import pathlib print(pathlib.Path.cwd()) # 雖然在這里打印出來的很像一個(gè)字符串,但實(shí)際上得到的是一個(gè)WindowsPath對象 # 其實(shí)現(xiàn)了 __repr__ 和 __str__ 底層方法 print(pathlib.Path(__file__)) # 獲取當(dāng)前文件路徑
工作目錄是在哪個(gè)目錄下運(yùn)行你的程序,不是項(xiàng)目目錄
獲取家目錄
import pathlib print(pathlib.Path.home()) # 獲取當(dāng)前用戶的家目錄
獲取文件絕對路徑
from pathlib import Path # 當(dāng)前文件路徑 p = Path(__file__) print(p) print(p.absolute()) # 將路徑轉(zhuǎn)換為絕對路徑,p.resolve()功能也是一樣的
遍歷當(dāng)前目錄
from pathlib import Path # 當(dāng)前文件路徑 p = Path('files') for i in p.iterdir(): print(i.absolute())
"""運(yùn)行結(jié)果:
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 # 當(dāng)前文件路徑 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) # 獲取當(dāng)前路徑的父級目錄,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 # 當(dāng)前文件路徑 p = Path(__file__) # 獲取當(dāng)前文件的路徑 print(p.is_absolute()) # True
5、路徑拼接
from pathlib import Path # 當(dāng)前文件路徑 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、正則匹配
使用模式匹配(正則表達(dá)式)匹配指定的路徑。glob 只會(huì)匹配當(dāng)前目錄下, rglob 會(huì)遞歸所有子目錄
比如在當(dāng)前腳本的 files 目錄有以下文件夾和子文件
from pathlib import Path p = Path('files') # glob 只會(huì)遍歷查找當(dāng)前目錄 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 只會(huì)遍歷查找當(dāng)前目錄以及其子目錄 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 檢查匹配規(guī)則 print(p_.match('*.json')) # True
7、讀寫操作
pathlib 對讀取和寫入進(jìn)行了簡單的封裝,不再需要重復(fù)去打開文件和管理文件的關(guān)閉了。
.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 模式,如果之前已經(jīng)有文件內(nèi)容,將會(huì)被覆蓋。
當(dāng)然,pathlib
還可以進(jìn)行文件的創(chuàng)建,刪除,以及修改操作,其與os
中的方法一樣,可以自行去研究
到此這篇關(guān)于Python四大模塊文件管理介紹的文章就介紹到這了,更多相關(guān)Python文件管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
12個(gè)Python程序員面試必備問題與答案(小結(jié))
這篇文章主要介紹了12個(gè)Python程序員面試必備問題與答案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06python gui開發(fā)——制作抖音無水印視頻下載工具(附源碼)
這篇文章主要介紹了python gui開發(fā)——制作抖音無水印視頻下載工具(附源碼)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02Python中的TfidfVectorizer參數(shù)使用解析
這篇文章主要介紹了Python中的TfidfVectorizer參數(shù)使用解析,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Python中交換兩個(gè)元素的實(shí)現(xiàn)方法
今天小編就為大家分享一篇Python中交換兩個(gè)元素的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06