Python檔案與目錄-os模組和shutil模組詳解

2021-03-02 12:00:12


os模組和 shutil模組是Python處理檔案/目錄的主要方式。os模組提供了一種使用作業系統相關功能的便捷方式,shutil模組是一種高階的檔案/目錄操作工具。

檔案的處理

os模組提供了一些便捷功能來使用作業系統資源,比如讀取資源目錄下的檔案、在命令列檢視某路徑下檔案的所有內容等。

獲取系統型別


對程式碼進行相容性開發以適應不同作業系統時通過作業系統型別進行判斷就可以輕鬆解決。

import os
import sys
print(os.name)  # 返回nt代表Windows,posix代表Linux
print(sys.platform)  # 更詳細資訊

在這裡插入圖片描述

獲取系統環境


對環境變數進行相關設定時,常常會呼叫模組environ模組。os.environ是以字典的形式返回系統環境變數,要獲取具體的屬性值,可以用索引,也可以用方法getenv()

import os
print(os.environ)
print(os.environ['PATH'])
print(os.getenv('PATH'))

在這裡插入圖片描述

執行系統命令


使用os模組system()方法可以執行shell命令,正常執行會返回0。使用格式是os.system("bash command")

在非控制檯編寫時,system()只會呼叫系統命令而不會執行,執行結果可通過popen()函數返回file物件進行讀取獲得。

import os
os.system('ping www.baidu.com')
os.popen('ping www.baidu.com').read()

在這裡插入圖片描述

操作目錄與檔案


使用os模組操作目錄和檔案時Python開發最為常見的功能之一。

方法說明範例
os.getcwd()獲取當前目錄路徑
os.chdir('目標路徑')更改當前指令碼目錄
os.listdir(path)列舉目錄下所有檔案
os.mkdir(path)建立單個目錄
os.makedirs(path)建立多級目錄
os.rmdir(path)刪除單級空目錄
os.removedirs(path)刪除多級目錄
os.rename("檔案或目錄名",」目標名「)重新命名目錄或檔案
os.path.abspath()獲取絕對路徑
os.path.split(path)將路徑分解為(資料夾,檔名)
若路徑字串最後一個字元是\,則只有資料夾部分有值;
若路徑字串中均無\,則只有檔名部分有值;
若路徑字串有\且不再最後,則資料夾檔名都有值。
os.path.join(path1,path2)將路徑組合
os.path.dirname(path)獲取path中的資料夾部分
os.path.basename(path)獲取path中的檔名
os.path.exists(path)判斷檔案或資料夾是否存在
os.path.isfile(path)判斷路徑是否是一個檔案
os.path.isdir(path)判斷路徑是否為一個目錄
os.path.getsize(path)獲取檔案或資料夾大小
os.path.getctime(path)獲取檔案或資料夾建立時間
os.path.getatime(path)獲取檔案或資料夾最後存取時間
os.path.getmtime(path)獲取檔案或資料夾最後修改時間
os.sep()路徑分割符
os.extsep()檔名和字尾之間的分割符
os.pathsep()路徑分隔符
os.linesep()換行符號

插播反爬資訊 )博主CSDN地址:https://wzlodq.blog.csdn.net/

檔案和目錄高階處理

相比os模組,shutil模組用於檔案和目錄的高階處理,提供了支援檔案賦值、移動、刪除、壓縮和解壓等功能。

複製檔案


shutil模組的主要作用是賦值檔案,大概有以下七種實現:

  1. shutil.copyfileobj(file1,file2)覆蓋複製
    將file1的內容覆蓋file2,file1、file2表示開啟的檔案物件。

  2. shutil.copyfile(file1,file2)覆蓋複製
    也是覆蓋,但是無須開啟檔案,直接用檔名進行覆蓋(其原始碼還是呼叫的copyfileobj)。

  3. shutil.copymode(file1,file2)許可權複製
    僅複製檔案許可權,不更改檔案內容、組和使用者,無返回物件。

  4. shutil.copystart(file1,file2)狀態複製
    複製檔案的所有狀態資訊,包括許可權、組、使用者和時間等,無返回物件。

  5. shutil.copy(file1,file2)內容和許可權複製
    複製檔案的內容和許可權,相當於先執行了copyfile再執行了copysmode。

  6. shutil.copy2(file1,file2)內容和許可權複製
    複製檔案的內容及所有狀態資訊,相當於先執行了copyfile再執行了copystart。

  7. shutil.copytree()遞迴複製
    遞迴地複製檔案內容及狀態資訊

移動檔案


使用函數shutil.move()函數可以遞迴地移動檔案或重新命名,並返回目標,若目標是現有目錄則src再當前目錄移動;若目標已經存在且不是目錄,則可能會被覆蓋。
在這裡插入圖片描述
在這裡插入圖片描述

讀取壓縮及歸檔壓縮檔案


使用函數shutil.make_archive()建立歸檔檔案,並返回歸檔後的名稱。
語法如下:
shutil.make_archive(base_name,format[,root_dir[,base_dir[,verbose[,dry_run[,owner[,group[,logger]]]]]]])

  • base_name為需要建立的檔名,包括路徑
  • format表示壓縮格式,可選zip、tar或bztar等
  • root_dir為歸檔的目錄
import shutil
path_1 = r'D:\PycharmProjects\Hello'
path_2 = r'D:\PycharmProjects\Hello\shutil-test'
new_path = shutil.make_archive(path_2,'zip',path_1)
print(new_path)

在這裡插入圖片描述

解壓檔案


使用函數shutil.unpack_archive(filename[,extract_dir[,format]])分析拆檔。

  • filename是歸檔的完整路徑
  • extract_dir是解壓歸檔的目標目錄名稱
  • format是解壓檔案的格式
import shutil
import os
shutil.unpack_archive('D:\PycharmProjects\Hello\shutil-test.zip','D:\\testdir')
print(os.listdir('D:\\testdir'))

在這裡插入圖片描述

小結


需要注意的是不同的作業系統中,路徑分隔符不一樣,在檔案處理時需要考慮。也可以使用os.sep()來替代檔案分隔符,因為作業系統而造成的程式異常。此外處理檔案時往往需要注意檔案許可權,還有注意檔案和資料夾的區別,使用遞迴等。

Python系列部落格持續更新中

原創不易,請勿轉載本不富裕的存取量雪上加霜
博主首頁:https://wzlodq.blog.csdn.net/
微信公眾號:唔仄lo咚鏘
如果文章對你有幫助,記得一鍵三連❤