天天看點

【Python】9個必知的Python操作檔案/檔案夾方法

近幾年随着​

​Python​

​的熱度不斷上漲,人們漸漸使用這門程式設計語言來進行一些自動化操作,以節省重複勞動帶來的效率低下,那麼必定會涉及到對檔案系統的操作,包括檔案的增、删、改、查等等,今天小編就來介紹一下如何用​

​Python​

​來實作這些功能

輸出目前的路徑

我們可以通過​

​Python​

​​當中的​

​OS​

​庫來擷取目前檔案所在的位置

import os
os.getcwd()      

路徑的拼接

我們通過​

​os.path.join()​

​方法來實作

os.path.join('output', 'Book1.xlsx')      

output

output\Book1.xlsx      

确認某檔案夾或者是檔案是否存在

我們先來看如何來确認檔案夾是否存在,同樣也是通過​

​OS​

​子產品

os.path.exists('directory_name')      

同樣的道理,要是我們檢視一下某個檔案是否存在的時候,可以這麼做

os.path.exists('path/file_name')      

建立檔案夾目錄

然後我們來看一下如何建立一個檔案夾

os.mkdir("檔案夾名稱")      

當然要是檔案夾目錄已經提前存在的情況下,上述的代碼自然會報錯,是以我們通常會先檢查一下是否已經存在

if not os.path.exists('檔案夾名稱'):
    os.mkdir('檔案夾名稱')      

當然我們有時候需要在已建的檔案夾下建立子檔案夾,例如下圖

【Python】9個必知的Python操作檔案/檔案夾方法

這個時候要是引用​

​os.mkdir()​

​​方法或許會稍顯繁瑣,這時我們可以通過​

​os.mkdirs()​

​方法來實作

os.makedirs(os.path.join('test_dir', 'level_1', 'level_2', 'level_3'))      

羅列出目前目錄下所包含的所有檔案

代碼如下

os.listdir('檔案夾名稱')      

但是有時候我們可能想例如搜尋一下目前目錄下的所有檔案中以“py”結尾的檔案,我們可以通過通配符來實作,代碼如下

list(glob(os.path.join('.', '*.py')))      

上面提到的​

​glob​

​​子產品能夠快速查找我們想要的目錄和檔案,它支援​

​*​

​​、​

​**​

​​、​

​?​

​​、​

​[]​

​這四個通配符

移動檔案

要是我們想在不同的目錄檔案夾之下移動檔案,該怎麼操作呢?這裡我們介紹​

​Python​

​​當中的​

​shutil​

​子產品,假設我們想要将目前目錄下的幾個csv檔案移動到“test_dir”目錄檔案夾之下,代碼如下

import shutil

for file in list(glob(os.path.join('.', '*.csv'))):
    shutil.move(file, 'test_dir')      

複制檔案

當我們想要複制檔案的時候,也可以使用​

​shutil​

​子產品,例如我們想要将幾個“test_dir”目錄檔案夾下的csv檔案複制到“output”目錄檔案夾之下,代碼如下

shutil.copy(os.path.join('test_dir', 'data.csv'), 'output')      

除此之外,我們還能夠對粘貼過去的檔案重命名,代碼如下

shutil.copy(os.path.join('test_dir', 'data.csv'),
            os.path.join('output', 'data_2.csv'))      

删除檔案

我們來看一下删除檔案該如何實作?​

​os.remove()​

​方法可以完成删除檔案的功能,

os.remove(os.path.join('output', 'data_2.csv'))      

當我們想要删除一整個目錄檔案夾的時候,可以使用​

​os.rmdir()​

​方法,當然隻僅限于是空的目錄檔案夾

os.rmdir(os.path.join('test_dir', 'level_1', 'level_2', 'level_3'))      

而對于目錄檔案夾下存在檔案的,并不是空的目錄檔案夾,我們還是需要用到​

​shutil​

​子產品,代碼如下

shutil.rmtree("test_delete")      

或者是

shutil.rmtree(os.path.join("test_delete", "test_1_delete"))      

建立和解壓 壓縮包

談及到操作壓縮包相關的内容,就不得不說​

​zipobj​

​這個子產品了

  • 建立一個壓縮包

這裡我們要用到的是​

​zipfile​

​​子產品當中的​

​write()​

​方法

file_lists = list(glob(os.path.join('.', '*.xlsx')))

with zipfile.ZipFile(r"我建立的壓縮包.zip", "w") as zipobj:
    for file in file_lists:
        zipobj.write(file)      
  • 讀取壓縮包當中的檔案資訊

通過​

​zipfile​

​​子產品當中的​

​namelist()​

​方法來實作

with zipfile.ZipFile("我建立的壓縮包.zip", "r") as zipobj:
    print(zipobj.namelist())      

output

['Book1.xlsx', 'supermarkt_sales.xlsx']      

可以看到輸出的就是上次我們打包的幾個​

​excel​

​檔案

  • 将壓縮包當中的單個檔案,解壓出來

通過​

​zipfile​

​​子產品當中的​

​extract()​

​方法來實作

dst = "output"

with zipfile.ZipFile("我建立的壓縮包.zip", "r") as zipobj:
    zipobj.extract("Book1.xlsx",dst)      

上述代碼的用意就是将壓縮包當中的“Book1.xlsx”檔案解壓至“output”目錄檔案夾下

  • 将壓縮包中的所有檔案,都解壓出來

通過​

​zipfile​

​​子產品當中的​

​extractall()​

​方法來實作,代碼如下

dst = "output"

with zipfile.ZipFile("我建立的壓縮包.zip", "r") as zipobj:
    zipobj.extractall(dst)      

qq群554839127