你應(yīng)該知道的10種Python文件系統(tǒng)方法

使用os和shutil操作文件和文件夾

你可以編寫Python程序來與文件系統(tǒng)進(jìn)行交互來做很酷的事情。怎么做并不總是非常清楚。本文是當(dāng)前和有抱負(fù)的開發(fā)人員和數(shù)據(jù)科學(xué)家的指南。我們將重點介紹10個基本的 os 和 shutil 命令,以便您可以編寫腳本來自動化與文件系統(tǒng)的交互。

像文件系統(tǒng)一樣文件系統(tǒng)有點像房子。假設(shè)您正在進(jìn)行春季清潔,您需要將筆記本盒從一個房間移動到另一個房間。

目錄就像盒子。他們持有東西。這些盒子就像目錄一樣。他們持有東西。在這種情況下,筆記本。

筆記本就像文件一樣。您可以讀取和寫入它們。您可以將它們放在目錄框中。Capiche?

在本指南中,我們將介紹 os 和 shutil 模塊中的方法。所述 OS 模塊是用于與操作系統(tǒng)進(jìn)行交互的主要Python模塊。該 shutil 模塊還包含了高層次的文件操作。出于某種原因,您使用 操作系統(tǒng)創(chuàng)建目錄,但移動并使用 shutil 復(fù)制它們。去搞清楚。:smirk:。

更新:于2019年2月16日增加的pathlib

在Python 3.4中, pathlib 模塊被添加到標(biāo)準(zhǔn)庫中以改進(jìn)文件路徑的使用,從3.6開始,它與標(biāo)準(zhǔn)庫的其余部分很好地配合使用。該 pathlib 方法提供了我們將在下面討論的方法解析文件路徑一些好處-即 pathlib將 路徑作為對象而不是字符串。雖然 pathlib 很方便,但它沒有我們將要探索的所有低級功能。此外,您無疑會在未來幾年 內(nèi)在 代碼中看到 os 和 shutil 方法。所以熟悉它們絕對是個好主意。

我打算在以后的文章中討論 pathlib ,所以請跟我來確保你不要錯過它。要立即了解有關(guān) pathlib 模塊的更多信息,請參閱 本文 和 本文 。

在我們挖掘之前要了解的其他一些事情:

本指南適用于Python 3.在2020年1月1日之后將不再支持Python 2 。您需要將os和shutil導(dǎo)入到您的文件中才能使用這些命令。我的示例代碼可以在GitHub上找到。用下面引號中的參數(shù)替換你自己的參數(shù)?,F(xiàn)在我們已經(jīng)完成了背景,讓我們開始吧!這是您應(yīng)該知道的10個命令的列表。

10文件系統(tǒng)方法

下面的列表遵循以下模式:

方法 - 描述 - 等效的macOS Shell命令

獲取信息

os.getcwd() - 將當(dāng)前工作目錄路徑作為字符串 - pwdos.listdir() - 獲取當(dāng)前工作目錄的內(nèi)容作為字符串列表lsos.walk("starting_directory_path")- 返回一個生成器,其中包含當(dāng)前目錄和所有子目錄中的目錄和文件的名稱和路徑信息 - 沒有確切的短CLI等效,但ls -R提供子目錄名稱和子目錄中文件的名稱改變一切

os.chdir("/absolute/or/relative/path") - 更改當(dāng)前工作目錄 - cdos.path.join()- 創(chuàng)建一個路徑供以后使用 - 沒有短的CLI等價物os.makedirs("dir1/dir2") - 制作目錄 - mkdir -pshutil.copy2("source_file_path", "destination_directory_path") - 復(fù)制文件或目錄 - cpshutil.move("source_file_path", "destination_directory_path") - 移動文件或目錄 - mvos.remove("my_file_path") - 刪除文件 - rmshutil.rmtree("my_directory_path")- 刪除目錄及其中的所有文件和目錄 - rm -rf來!我們討論一下。

歡迎大家加入小編創(chuàng)建的Python行業(yè)交流群,有大牛答疑,有資源共享,有企業(yè)招人!是一個非常不錯的交流基地!群號:556370268

獲取信息

os.getcwd() os.getcwd()以字符串形式返回當(dāng)前工作目錄。那一個是直截了當(dāng)?shù)摹?smile:

os.listdir() os.listdir()以字符串列表的形式返回當(dāng)前工作目錄的內(nèi)容。那一個也很簡單。:smile:

os.walk("my_start_directory")

os.walk() 創(chuàng)建一個生成器,可以返回有關(guān)當(dāng)前目錄和子目錄的信息。它通過指定的起始目錄中的目錄工作。

os.walk() 為它遍歷的每個目錄返回以下項:

1.當(dāng)前目錄路徑作為字符串當(dāng)。

2.當(dāng)前目錄中的子目錄名稱作為字符串列表。

3.當(dāng)前目錄中的文件名作為字符串列表。

它為每個目錄執(zhí)行此操作!

它的使用常常是有用的

os.walk() 一個 用于 循環(huán)遍歷目錄及其子目錄的內(nèi)容。例如,以下代碼將打印當(dāng)前工作目錄的目錄和子目錄中的所有文件。

import os

cwd = os.getcwd()

for dir_path, dir_names, file_names inos.walk(cwd):

for f in file_names:

print(f)這就是我們獲取信息的方式,現(xiàn)在讓我們看看更改工作目錄或移動,復(fù)制或刪除文件系統(tǒng)部分的命令。

改變一切

os.chdir("/absolute/or/relative/path")

此方法將當(dāng)前工作目錄更改為提供的絕對路徑或相對路徑。

如果您的代碼隨后對文件系統(tǒng)進(jìn)行了其他更改,那么在使用此方法和try-except時處理引發(fā)的任何異常都是一個好主意。否則,您可能正在刪除不想刪除的目錄或文件。:cry:

os.path.join() 該 os.path 模塊有許多用于常見路徑名操作的有用方法。您可以使用它來查找有關(guān)目錄名稱和目錄名稱部分的信息。該模塊還具有檢查文件或目錄是否存在的方法。

os.path.join() 通過將多個字符串連接到一個漂亮的文件路徑,可以創(chuàng)建一個適用于大多數(shù)操作系統(tǒng)的路徑.

這是 文檔中 的描述:

智能地加入一個或多個路徑組件。返回值是 路徑 和 *路徑的 任何成員的串聯(lián), os.sep 在每個非空部分之后只有一個目錄separator(),除了最后一個....

基本上,如果您使用的是Unix或macOS系統(tǒng),請 os.path.join() 在您提供的每個字符串之間添加正斜杠(“/”)以創(chuàng)建路徑。如果操作系統(tǒng)需要“\”,則 join 知道使用反斜杠。

os.path.join() 還向其他開發(fā)人員提供了您正在創(chuàng)建路徑的 明確信息 。絕對使用它而不是手動字符串連接,以避免看起來像一個菜鳥。:wink:

os.makedirs("dir1/dir2")

os.makedirs() 制作目錄。該 mkdir() 方法也可以創(chuàng)建目錄,但它不會創(chuàng)建中間目錄。所以我建議你使用 os.makedirs() 。

shutil.copy2("source_file", "destination") 有許多方法可以在Python中復(fù)制文件和目錄。shutil.copy2() 是一個很好的選擇,因為它試圖盡可能多地保留源文件的元數(shù)據(jù)。

image

移動?xùn)|西shutil.move("source_file", "destination")

使用 shutil.move() 更改文件的位置。它 copy2 在引擎蓋下用作默認(rèn)值。 os.remove("my_file_path") 有時您需要刪除文件。 os.remove() 是你的工具。

shutil.rmtree("my_directory_path")

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

刪除東西小心刪除東西的功能!您可能希望使用print()打印將作為空運(yùn)行刪除的內(nèi)容。然后在你確定它不會刪除錯誤的文件時,在你的刪除函數(shù)中運(yùn)行print()。在 使用Python自動化無聊的東西時, 向Al Sweigart提出了這個想法。這是完整的列表。

10文件系統(tǒng)方法回顧

下面的列表遵循以下模式: 方法 - 描述 - 等效的macOS Shell命令

獲取信息

os.getcwd() - 將當(dāng)前工作目錄路徑作為字符串 - pwd

os.listdir() - 獲取當(dāng)前工作目錄的內(nèi)容作為字符串列表 - ls

os.walk("starting_directory_path") - 返回一個生成器,其中包含當(dāng)前目錄和所有子目錄中的目錄和文件的名稱和路徑信息 - 沒有確切的短CLI等效,但 ls -R 提供子目錄名稱和子目錄中文件的名稱改變一切 os.chdir("/absolute/or/relative/path") - 更改當(dāng)前工作目錄 - cd

os.path.join() - 創(chuàng)建一個路徑供以后使用 - 沒有短的CLI等價物 os.makedirs("dir1/dir2") - 制作目錄 - mkdir-ps

hutil.copy2("source_file_path", "destination_directory_path") - 復(fù)制文件或目錄 - cp

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

os.remove("my_file_path") - 刪除文件 - rm

shutil.rmtree("my_directory_path") - 刪除目錄及其中的所有文件和目錄 - rm -rf

Wrap

現(xiàn)在您已經(jīng)看到了在Python中與文件系統(tǒng)交互的基礎(chǔ)知識。在IPython解釋器中嘗試這些命令以獲得快速反饋。然后向其他人解釋它們以鞏固您的知識。如果你在家里搬了一盒筆記本電腦,你就不那么痛了。:house:但是運(yùn)動會很好,所以現(xiàn)在你可以去健身房了。 ?♀?

如果你想深入了解,請查看免費(fèi)電子書 自動化Python的無聊東西 。

如果您想了解使用Python從文件中讀取和寫入,請查看 open 函數(shù) 。記得像這樣使用上下文管理器: with open(‘myfile’) as file: .:smile:

我希望你發(fā)現(xiàn)這個Python文件系統(tǒng)操作介紹很有用。如果您這樣做,請在您最喜歡的社交媒體渠道上分享,以便其他人也可以找到它。

我寫的是關(guān)于Python,Docker,數(shù)據(jù)科學(xué)等等。如果您對此感興趣,請 在此處 閱讀更多內(nèi)容并按照我的說明進(jìn)行操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容