18.目錄與文件 18.1 os和shutil 日常使用過程中,難免需要使用跟文件系統相關的標準庫。在使用Python文件系統中,常用的庫為os和shutil標準庫,方法如下所示: import os import shutil 18.1.1 遍歷文件夾 os.getcwd():獲取當前工作目錄,返 ...
18.目錄與文件
18.1 os和shutil
日常使用過程中,難免需要使用跟文件系統相關的標準庫。在使用Python文件系統中,常用的庫為os和shutil標準庫,方法如下所示:
import os
import shutil
18.1.1 遍歷文件夾
os.getcwd():獲取當前工作目錄,返回為字元串形式,類似於Linux中的命令pwd
os.listdir(path):獲取指定路徑中的文件及文件夾,返回為列表形式,類似於Linux中的命令ls
os.walk(path):以遞歸形式遍歷指定路徑中的文件及文件夾,返回形式為生成器,類似於Linux中的命令ls -R,示例代碼如下所示:
import os
curPath=os.getcwd()
# 使用列表推導返回當前目錄中所有的文件
fileList=[ os.path.join(dirPath,fileName) for dirPath,dirName,fileNames in os.walk(curPath) for fileName in fileNames if os.path.isfile(os.path.join(dirPath,fileName))]
18.1.2 改變路徑
os.chdir("絕對/相對路徑"):切換到其他目錄,類似於Linux中的命令cd
os.path.join():合成完整的路徑
如果在需要合成完整路徑,則推薦使用此方法,在Windows中路徑分隔符為 \ ,在Linux中路徑分隔符為 /
os.path.expanduser(path):把path中對用戶相關的特殊字元轉換為用戶目錄,在Linux中,使用~表示用戶家目錄,如果在Linux進行切換用戶家目錄,則可以使用該方法,示例代碼如下所示:
>>> os.path.expanduser(os.path.join("~","Python"))
'C:\\Users\\Surpass\\Python'
18.1.3 創建文件夾
os.mkdir(path,[mode]):創建文件夾,類似於Linux中的命令mkdir
使用該方法時,要求上一級目錄必須存在。
os.makedirs(path,[mode,exist_ok]):遞歸創建文件夾,類似於Linux中的命令mkdir -p
使用該方法時,上一級目錄可以不用存在,但如果存在,想要覆蓋則必須使用參數exist_ok=True
18.1.4 覆蓋/複製/移動文件或文件夾
shutil.copyfileobj(src,dst,length):使用文件1的內容覆蓋文件2的內容,類似於Linux中的命令cp,示例代碼如下所示:
import os
import shutil
curPath=os.getcwd()
file1=open(os.path.join(curPath,"1.txt"),"r",encoding="utf8")
file2=open(os.path.join(curPath,"2.txt"),"w",encoding="utf8")
shutil.copyfileobj(file1,file2)
shutil.copyfile(src,dst):複製文件併進行重命名,類似於Linux中的命令cp
shutil.copy(src,dst):功能同上,示例代碼如下所示:
import os
import shutil
curPath=os.getcwd()
filePath1=os.path.join(curPath,"1.txt")
filePath2=os.path.join(curPath,"2.txt")
shutil.copyfile(filePath1,filePath2)
shutil.copy2(srcFile,dstDir):複製到文件到目錄,示例代碼如下所示:
import os
import shutil
curPath=os.getcwd()
srcPath=os.path.join(curPath,"mvdir.zip")
dstPath=os.path.join(curPath,"mvdir")
shutil.copy2(srcPath,dstPath)
shutil.copytree(srcPath,dstPath,ignore=shutil.ignore_patterns("*.py")):遞歸複製目錄到另一個目錄中,類似於Linux中的命令cp -r,需要註意的是 目的目錄必須不存在,示例代碼如下所示:
import os
import shutil
srcPath=os.getcwd()
dstPath=os.path.join(srcPath,"copydir")
# 複製目錄,並忽略擴展名為py的文件
shutil.copytree(srcPath,dstPath,ignore=shutil.ignore_patterns("*.py"))
shutil.rmtree(dst,ignore_errors=True):遞歸刪除目錄下的所有文件及文件夾,含目錄本身,類似於Linux中的命令rm -rf,示例代碼如下所示:
import os
import shutil
srcPath=os.getcwd()
dstPath=os.path.join(srcPath,"copydir")
shutil.rmtree(dstPath,ignore_errors=True)
os.remove(path):刪除文件,但不能刪除文件夾,類似於Linux中的命令rm,示例代碼如下所示:
import os
curPath=os.getcwd()
srcPath=os.path.join(curPath,"mvdir.zip")
os.remove(srcPath)
shutil.move(srcPath,dstPath):遞歸移動文件或文件夾到另一個目錄,類似於Linux中的命令mv,示例代碼如下所示:
import os
import shutil
curPath=os.getcwd()
srcPath=os.path.join(curPath,"copy")
dstPath=os.path.join(curPath,"mvdir")
shutil.move(srcPath,dstPath)
shutil.make_archive(fileName,format,dstDir):對目錄創建壓縮打包,format為zip/tar等,類似於Linux中的命令tar -cf,示例代碼如下所示:
import os
import shutil
curPath=os.getcwd()
srcPath=os.path.join(curPath,"copy")
dstPath=os.path.join(curPath,"mvdir")
shutil.make_archive(dstPath,"zip",dstPath)
18.1.5 文件或文件夾是否存在
os.path.exists(path)
18.1.6 判斷是否為文件或文件夾
os.path.isfile(path)
os.path.isdir(path)
18.1.7 獲取文件名或路徑
os.path.basename(path):獲取文件名(含擴展名)
os.path.dirname(path):獲取文件路徑
os.path.splitext(path):分離文件名和擴展名
os.path.split(path):分離文件路徑和文件名(含擴展名)
import os
tmpPath=r"C:\Users\Surpass\PycharmProjects\1.txt"
fileName=os.path.basename(tmpPath)
filePath=os.path.dirname(tmpPath)
fileExtName=os.path.splitext(tmpPath)[-1]
path,fname=os.path.split(tmpPath)
18.2 pathlib
除os標準庫之外,在Python 3.4及之後的版本,有一個更好的用的標準庫pathlib,使用起來更方便簡單。在使用之前需要導入該庫
import pathlib
18.2.1 遍歷文件夾
p.cwd():返回當前工作目錄,相當於os.getcwd()
p.home():返回用戶家目錄,相當於Linux命令中的cd ~
p.resolve():獲取完整路徑
p.iterdir():獲取目錄中的文件和文件夾,相當於os.listdir()
p.glob(".py"):獲取目錄中的文件和文件夾,相當於os.listdir(),可以添加篩選條件
p.rglob(""):遞歸獲取目錄中的文件和文件夾,相當於os.walk(),可以添加篩選條件
示例代碼如下所示:
from pathlib import Path
tmpPath=r"C:\Users\Surpass\PycharmProjects"
for item in Path(tmpPath).rglob("*"):
temp=Path(item)
if not temp.is_dir():
print(item)
18.2.2 改變路徑
Path(p,file/path) 相當於os.path.join()
p.expanduser():相當於os.path.expanduser(path)
from pathlib import Path
tmpPath=r"C:\Users\Surpass\PycharmProjects\"
p=Path(tmpPath)
p=Path(p,"aa.txt")
18.2.3 創建文件夾
p.mkdir(exist_ok=True):前提是上級目錄必須存在,相當於os.mkdir()
p.mkdir(exist_ok=True,parents=True):遞歸創建文件夾,推薦這種用法,相當於os.makedirs()
from pathlib import Path
tmpPath=r"C:\Users\Surpass\PycharmProjects\Test"
p=Path(tmpPath)
p.mkdir()
tmpPath=r"C:\Users\Surpass\PycharmProjects\TestMakeFile\AddTest"
p=Path(tmpPath)
p.mkdir(exist_ok=True,parents=True)
18.2.4 獲取文件名或路徑
from pathlib import Path
tmpPath=r"C:\Users\Surpass\PycharmProjects\1.txt"
p=Path(tmpPath)
p.name # 獲取文件名,包含擴展名
p.stem # 獲取文件名,不包含擴展名
p.suffix # 獲取文件擴展名,返回為字元串形式
p.suffixes # 獲取文件擴展名,返回為列表形式
p.parent # 獲取文件名路徑,相當於os.path.basename()
18.2.5 判斷是否為文件或文件夾
Path.is_file()
Path.is_dir()
18.2.6 文件或文件夾是否存在
Path.exists()
18.2.7 創建文件
p.touch() :相當於Linux命令中的touch
示例代碼如下所示:
from pathlib import Path
filePath=r"C:\Users\Administrator\PycharmProjects\surpass\test\test.txt"
p=Path(filePath)
p.touch()
18.2.8 刪除文件夾或文件
p.unlink():刪除文件
p.rmdir():刪除空目錄,如果目錄不為空,則會出現報錯
本文地址:https://www.cnblogs.com/surpassme/p/13034964.html
本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註: