Python文件目錄操作常用模塊的使用詳解
Python中用于文件目錄操作的常用模塊有os, shutil,pathlib等.
os就是“Operating System”的縮寫,顧名思義,os模塊提供的就是各種 Python 程序與操作系統(tǒng)進(jìn)行交互的接口。通過使用os模塊,一方面可以方便地與操作系統(tǒng)進(jìn)行交互,另一方面也可以提高代碼的可移植性,方便代碼跨操作系統(tǒng)平臺(tái)使用。如果該模塊中相關(guān)功能出錯(cuò),會(huì)拋出OSError異?;蚱渥宇惍惓?。
shutil可以簡(jiǎn)單地理解為sh + util,shell工具的意思。shutil模塊是對(duì)os模塊的補(bǔ)充,主要針對(duì)文件的拷貝、刪除、移動(dòng)、壓縮和解壓操作。
1. os模塊
Python的os模塊封裝了常見的文件和目錄操作。
通常來(lái)說(shuō),不建議用from os import *來(lái)導(dǎo)入os模塊。os模塊中有些函數(shù)與python內(nèi)置函數(shù)重名,比如說(shuō)open()。這種方式導(dǎo)入時(shí),os.open就把python內(nèi)置open()覆蓋了。
如果是讀寫文件的話,建議使用內(nèi)置函數(shù)open();如果是路徑相關(guān)的操作,建議使用os的子模塊os.path;如果要逐行讀取多個(gè)文件,建議使用fileinput模塊;要?jiǎng)?chuàng)建臨時(shí)文件或路徑,建議使用tempfile模塊;要進(jìn)行更高級(jí)的文件和路徑操作則應(yīng)當(dāng)使用shutil模塊。
使用os模塊可以寫出操作系統(tǒng)無(wú)關(guān)的代碼。但是os也可以調(diào)用一些特定系統(tǒng)的擴(kuò)展功能,但要切記一點(diǎn):一旦這樣做就會(huì)極大損害代碼的可移植性。
1.1 獲取系統(tǒng)信息
判斷使用的平臺(tái):字符串指示你正在使用的平臺(tái)。比如對(duì)于Windows,它是'nt',而對(duì)于Linux/Unix用戶,它是 'posix'。有時(shí)候給出的信息不夠細(xì)。
# 獲取平臺(tái)名稱. 注意這個(gè)不是函數(shù),所以不需要帶括號(hào)() os.name # 獲取系統(tǒng)的核心數(shù) os.cpu_count() # 改變權(quán)限 os.chmod(path, mode)
1.2 工作目錄與路徑相關(guān)的操作
# 獲取路徑和文件名等 os.getcwd() #函數(shù)得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑 os.path.abspath($name) #當(dāng)前目錄下文件或文件夾的絕對(duì)路徑 os.path.basename(path) #返回文件名 os.path.dirname(path) #返回文件的上級(jí)路徑 os.path.split() #分離文件名和上級(jí)路徑 os.path.join() #合并文件名和指定路徑 os.path.splitext() #分離文件名與擴(kuò)展名,返回的擴(kuò)展名包括了'.'符號(hào),默認(rèn)只返回第一個(gè)'.后綴'和前綴。 # 改變工作目錄到dirname os.chdir(dirname) # 該函數(shù)相當(dāng)于linux命令“l(fā)s”,列舉出指定目錄中的內(nèi)容。其返回值是一個(gè)列表。列表中的每一格元素表示一個(gè)子目錄名,或者一個(gè)文件名 os.listdir(path) # 創(chuàng)建一個(gè)目錄 os.mkdir(path) # 刪除一個(gè)目錄 os.rmdir(path) # 重命名 os.rename(src, dst) # 獲取文件大小信息 os.path.getsize(name) #獲得文件大小,如果name是目錄返回0L
1.3 判斷是否文件或目錄以及指定文件目錄是否存在
#函數(shù)分別檢驗(yàn)給出的路徑是一個(gè)文件? os.path.isfile() #函數(shù)分別檢驗(yàn)給出的路徑是一個(gè)目錄? os.path.isdir() #函數(shù)用來(lái)檢驗(yàn)給出的路徑是否真地存在 os.path.exists()
1.4 刪除一個(gè)文件或者目錄
Ref: How to delete a file or folder in Python? - Stack Overflow
# 刪除一個(gè)文件 os.remove() # 刪除一個(gè)文件 os.unlink() # 刪除一個(gè)空目錄,如果不是空目錄會(huì)報(bào)錯(cuò) os.rmdir()
BTW, 除了OS模塊外,shutil和pathlib也提供了相應(yīng)的函數(shù)。
# 刪除目錄,包括其中的文件以及子目錄,需要小心使用 shutil.rmtree() # removes a file or symbolic link. pathlib.Path.unlink() # removes an empty directory. pathlib.Path.rmdir()
1.5 串連創(chuàng)建或者分離一個(gè)文件目錄路徑
#os.path.join(datadir,file) #與直接字符串連接不同的是,'D:/tmp'即可,不需要'D:/tmp/' os.path.join('D:/tmp','tmp.txt') # 返回路徑的目錄和文件名,即將目錄和文件名分開,而不是一個(gè)整體。此處只是把前后兩部分分開而已。就是找最后一個(gè)'/'。 os.path.split(path)
1.6 執(zhí)行外部shell命令
os.system(cmd) #執(zhí)行外部shell命令。
2. shutil模塊
shutil可以簡(jiǎn)單地理解為sh + util,shell工具的意思。shutil模塊是對(duì)os模塊的補(bǔ)充,主要針對(duì)文件的拷貝、刪除、移動(dòng)、壓縮和解壓操作。
2.1 拷貝文件
shutil會(huì)自動(dòng)識(shí)別拷貝的到底是文件還是文件夾, 如果存在同名的文件將會(huì)自動(dòng)進(jìn)行覆蓋。
shutil.copy($file_path, $dir_path)
2.2 移動(dòng)或重命名文件
如果路徑下已有重名的文件,將報(bào)錯(cuò)!
shutil.move($file_path, $dir_path) # 移動(dòng)到另外一個(gè)文件夾中 shutil.move($file_path, $new_file_path) # 重命名為新的絕對(duì)路徑
2.3 拷貝文件夾/刪除文件夾
shutil.copytree($file_path, $dir_path) # 拷貝所有文件到新的文件夾下,保持原有的文件結(jié)構(gòu)。 shutil.rmtree($dir_path) # 刪除此路徑的文件夾
2.4 生成壓縮文件
shutil.make_archive(base_name, 'gztar', root_dir, [base_dir)
base_name : 創(chuàng)建的目標(biāo)文件名,包括路徑,減去任何特定格式的擴(kuò)展。
format : 壓縮包格式。”zip”, “tar”, “bztar”或”gztar”中的一個(gè)。
root_dir : 需要打包的文件夾路徑。打包完成時(shí)存儲(chǔ)在上一級(jí)目錄。
base_dir : 使用后會(huì)將base_dir作為路徑,解壓后有個(gè)有層級(jí)的文件夾,而僅非只有單獨(dú)的打包內(nèi)容。
2.5 解壓文件
shutil.unpack_archive(filename[, extract_dir[, format]])
filename是壓縮文檔的完整路徑
extract_dir是解壓縮路徑,默認(rèn)為當(dāng)前目錄。
format是壓縮格式。默認(rèn)使用文件后綴名代碼的壓縮格式。”zip”, “tar”, “bztar”或”gztar”中的一個(gè)。
到此這篇關(guān)于Python文件目錄操作常用模塊的使用詳解的文章就介紹到這了,更多相關(guān)Python文件目錄操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 通過logging寫入日志到文件和控制臺(tái)的實(shí)例
下面小編就為大家分享一篇python 通過logging寫入日志到文件和控制臺(tái)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-04-04Python采集股票數(shù)據(jù)并制作可視化柱狀圖
這篇文章主要介紹了如何利用Python采集股票數(shù)據(jù)并制作可視化柱狀圖,文中的示例代碼講解詳細(xì),快來(lái)跟上小編一起動(dòng)手嘗試一下吧2022-04-04pandas?dataframe?drop函數(shù)介紹
這篇文章主要介紹了pandas?dataframe?drop函數(shù)介紹,文章通圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09發(fā)工資啦!教你用Python實(shí)現(xiàn)郵箱自動(dòng)群發(fā)工資條
這篇文章主要介紹了發(fā)工資啦!教你用Python實(shí)現(xiàn)郵箱自動(dòng)群發(fā)工資條,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05python 利用PyAutoGUI快速構(gòu)建自動(dòng)化操作腳本
我們經(jīng)常遇到需要進(jìn)行大量重復(fù)操作的時(shí)候,比如:網(wǎng)頁(yè)上填表,對(duì) web 版本 OA 進(jìn)行操作,自動(dòng)化測(cè)試或者給新系統(tǒng)首次添加數(shù)據(jù)等,今天就利用PyAutoGUI構(gòu)建自動(dòng)化操作腳本完成這些重復(fù)的需求2021-05-05Django實(shí)現(xiàn)簡(jiǎn)單分頁(yè)功能的方法詳解
這篇文章主要介紹了Django實(shí)現(xiàn)簡(jiǎn)單分頁(yè)功能的方法,結(jié)合實(shí)例形式分析了django的第三方模塊django-pure-pagination的安裝、使用及實(shí)現(xiàn)分頁(yè)的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12