當前位置:
首頁 > 科技 > Python處理文件系統的10種方法

Python處理文件系統的10種方法

作者 | Jeff Hale

譯者 | 風車雲馬;責編 | Jane,Rachel

出品 | Python大本營(ID:pythonnews)

【導讀】在編寫一些Python程序的時候,我們常常需要與文件系統進行交互。在本文中,營長為大家整理了10個常用的相關命令,涉及查看信息、更改信息、刪除文件等,並提供了相應的終端命令,幫助大家更高效地對文件系統及其中的文件內容進行操作。

通過一個能夠實現與文件系統進行交互的Python程序,我們可以實現很多有趣的應用,但是大部分人並不知道如何實現這種交互。本文為相關研發人員和數據科學家提供了一個實現指南,並重點介紹10個基本的os和shutil命令,以便通過腳本實現Python程序與文件系統的自動交互。

文件系統和一棟房子的結構相似。在每次進行大掃除的時候,我們都需要將很多箱的文件從一個屋子移動到另一個屋子,這和使用Python移動文件的操作很像。

文件目錄則像裝滿了東西的箱子,只不過在文件系統中,裝的都是系統中存儲的文件。

裝在箱子中的筆記本,就像電腦中存儲的文件,我們可以對其進行讀/寫,也可以把它們存放在目錄中。

這個指南介紹了os和shutil模塊中的相關方法。其中,os模塊主要用於與操作系統交互,shutil模塊則包含一些針對文件的操作。一般情況下,我們使用os創建目錄,使用shutil移動和複製文件。

Python標準庫更新:2019年2月16日新增pathlib庫

在 Python 3.4 版本,標準庫中增加了 pathlib 模塊,以改進文件路徑的處理;在3.6版本中,增加了更多pathlib與標準庫的其他模塊的交互,效果很好。pathlib將路徑視為對象而非字元串,這使得其在解析文件路徑上具有一定優勢。如果你想要對pathlib有更多了解,可以閱讀 Real Python 和 pbpython 提供的介紹。雖然pathlib 很方便,但它不具備我們將要探索的一些底層功能。因此,使用 os 和shutil 方法還是有必要的。

在進行更詳細的介紹之前,有以下幾點需要注意:

本指南是基於 python3,2020年1月以後將不再支持 python 2 。

在使用相關命令之前,需要在代碼開頭導入了 os 和 shutil 庫。

我的示例代碼可以在GitHub上找到。

請使用自己的參數替換下面引號中的參數。

下面, 本文將逐一介紹文件系統的 10 種命令方法,每個部分都會按照「方法:描述對應的 macOS Shell 命令」模式進行介紹,便於大家理解。

一、獲取信息(Get Info)

os.getcwd():以字元串形式獲取當前工作目錄路徑 pwd

os.listdir()?:以字元串列表的形式獲取當前工作目錄的內容ls

os.walk("starting_directory_path"):返回一個生成器(generator),該生成器包含當前目錄和所有子目錄中的文件名稱及路徑信息;沒有完全等價的shell命令,不過 ls -R 命令提供了子目錄名稱和子目錄中的文件名稱

二、更改信息(Change Things)

os.chdir("/absolute/or/relative/path"):更改當前的工作路徑 cd

os.path.join():創建路徑供後續使用 沒有等效的命令

os.makedirs(「dir1 / dir2」):創建目錄 mkdir - p

shutil.copy2("source_file_path","destination_directory_path"):複製文件或目錄 cp

shutil.move("source_file_path","destination_directory_path"):移動文件或目錄 mv

os.remove(「my_file_path」):刪除文件 rm

shutil.rmtree(「my_directory_path」):刪除路徑及其包含的所有文件和目錄 rm –rf

以上是對十個最常用、基礎的文件系統方法的初步介紹,接下來我們再深入講解一些重要的模塊和使用方法。

查看信息

以字元串形式返回當前工作目錄

以字元串列表形式返回當前目錄

創建一個生成器,用於返回關於當前目錄和子目錄的信息。在起始指定的目錄中有效。

os.walk() 遍歷包含的每個目錄後,都會返回下列項:

(1)當前目錄路徑(字元串類型)

(2)當前目錄下的子目錄名稱(字元串列表類型)

(3)當前目錄中的文件名稱(字元串列表類型的)

使用帶有for循環的os.walk()來遍歷目錄及其子目錄的內容通常很有用。例如,下面的代碼將列印當前工作目錄的目錄和子目錄中的所有文件。

以上是獲取信息的操作。下面讓我們一起看一下更改工作目錄或移動、複製、刪除文件系統的命令。

更改信息

此方法將當前工作路徑更改為絕對路徑或相對路徑。

如果隨後要對文件系統進行其他更改,在試用該方法時留意處理任何異常。否則,您可能正在刪除不希望刪除的目錄或文件。

os.path模塊提供了許多用於路徑名操作的有用方法。您可以使用它查找有關目錄名稱,或者目錄名稱的部分信息。該模塊還可以用來檢查文件或目錄是否存在。

os.makedirs()能夠生成目錄。mkdir()方法也可以生成目錄,但它不生成中間目錄。所以建議使用os.makedirs()。

在Python中複製文件和目錄的方法有很多,但建議使用此命令。shutil.copy2()的優勢在於,它儘可能地保留了源文件的元數據。如果你希望對文件和努力的複製有更多了解,可以閱讀這篇文章。

移動文件

使用shutil.move()更改文件的位置。它使用 copy2 作為後台參數默認值。

當需要刪除文件時,可以使用os.remove()工具。

shutil.rmtree()刪除一個目錄及其中的所有文件和目錄。

刪除文件

使用刪除函數的時候一定要多加小心!您可以使用print()將要刪除的內容列印出來,在確定不會刪除錯誤文件後,再用相應的刪除文件函數替換print()。在此向Al Sweigart致敬,感謝他在文章《Automate the Boring Stuff with Python》中進行的討論。

最後我們再回顧一下整個方法。

10種文件系統方法概述

下面方法遵循這個模式:方法——描述——等效macOS Shell命令

獲取信息

os.getcwd() ——以字元串形式獲取當前工作目錄路徑—— pwd

os.listdir()?——以字元串列表的形式獲取當前工作目錄的內容——ls

os.walk("starting_directory_path")——返回函數,其中包含當前目錄和所有子目錄中的目錄和文件的名稱和路徑信息——沒有完全等價的shell命令,不過ls -R提供了子目錄名稱和子目錄中的文件名稱

改動信息

os.chdir("/absolute/or/relative/path")?——改變當前的工作路徑——cd

os.path.join()——創建路徑供後續使用——沒有等效CLI

os.makedirs (「dir1 / dir2」)——創建目錄——mkdir - p

shutil.copy2("source_file_path","destination_directory_path")——複製文件或目錄——cp

shutil.move("source_file_path","destination_directory_path")——移動文件或目錄——mv

os.remove (「my_file_path」)——刪除文件——rm

shutil.rmtree (「my_directory_path」)——刪除路徑及其包含的所有文件和目錄——rm –rf

以上介紹了關於Python與文件系統交互的一些基礎知識。希望大家在Ipython編輯器中多嘗試這些命令,並向其他人解釋這些方法,以更好的掌握和鞏固知識。

如果你想對相關內容有更多了解,可以看看免費的電子書,或者多用Python編編代碼。關於使用Python從文件中讀寫的相關操作,請查看open函數的官方文檔。

https://towardsdatascience.com/10-python-file-system-methods-you-should-know-799f90ef13c2

(*本文為 AI科技大本營轉載文章,轉載請聯繫原作者)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI科技大本營 的精彩文章:

美亞Kindle排名第一的Python 3入門書,火遍了整個編程圈

TAG:AI科技大本營 |