Python文件與文件夾操作大全(非常全面)
前言:
計算機(jī)操作系統(tǒng)是以文件為單位對數(shù)據(jù)進(jìn)行管理的。文件是指存儲在某種介質(zhì)上的數(shù)據(jù)集合。文件在存儲介質(zhì)上的位置是由驅(qū)動器名稱、文件夾以及文件名來定位的。Python具有強大的文件處理功能,如文件的創(chuàng)建、打開、文件內(nèi)容的寫入、讀出文件中的內(nèi)容等等。
1.文件基本操作:
1.1創(chuàng)建文件:
在Python中利用 open(file_name,code)
方法來創(chuàng)建(打開)文件(如果該文件已存在就直接打開,如果該文件不存在,就創(chuàng)建新文件)。
語法格式如下:
open(file_name,code)
參數(shù)說明:
name:創(chuàng)建文件的名稱;
code:創(chuàng)建文件的模式。
code | 含義 |
---|---|
‘w’ | 打開一個文件,只寫 |
‘wb’ | 以二進(jìn)制格式打開一個文件,只寫 |
‘w+’ | 打開一個文件,讀寫 |
‘wb+‘ | 以二進(jìn)制格式打開一個文件,讀寫 |
‘r’ | 以只讀的方式打開文件。文件指針位于文件開頭 |
‘r+’ | 打開一個文件用于讀寫。文件指針位于文件開頭 |
‘rb’ | 以二進(jìn)制格式打開一個文件進(jìn)行讀寫。文件指針位于文件開頭,一般用于非文本文件(如,圖片) |
‘a’ | 打開一個文件用于追加。若該文件已存在,則文件指針位于文件末尾,新的內(nèi)容將被被寫入到原有內(nèi)容之后;若該文件不存在,則創(chuàng)建新文件進(jìn)行寫入。 |
‘ab’ | 以二進(jìn)制格式打開一個文件,用于追加。若該文件已存在,則文件指針位于文件末尾,新的內(nèi)容將被被寫入到原有內(nèi)容之后;若該文件不存在,則創(chuàng)建新文件進(jìn)行寫入。 |
‘a+’ | 打開一個文件用于讀寫.文件指針位于文件末尾 |
‘ab+’ | 以二進(jìn)制格式打開一個文件用于讀寫。文件指針位于文件末尾 |
表1-1
注意:在 Python 中,以普通方式(文本模式)打開或創(chuàng)建文件和以二進(jìn)制格式打開或創(chuàng)建文件,主要有以下幾點不同:
數(shù)據(jù)的讀取與寫入方式: 在文本模式下,文件中的內(nèi)容被視為字符串(在 Python 3 中為 Unicode 字符串),并且會自動處理平臺特定的行結(jié)束符。在 Windows 上,行結(jié)束符為 \r\n,在 Unix/Linux 上為 \n。當(dāng)你從文件讀取或?qū)懭胛谋緯r,Python 會自動處理這些行結(jié)束符。但是,在二進(jìn)制模式下,數(shù)據(jù)則被視為原始字節(jié)流,不會對行結(jié)束符做任何處理。
編碼問題: 在文本模式下,可以通過 encoding 參數(shù)指定一個字符編碼方式,比如 UTF-8,ASCII等。當(dāng)你從文件讀取或?qū)懭胛谋緯r,Python 會自動根據(jù)指定的編碼方式對文本進(jìn)行編碼或解碼。但是,在二進(jìn)制模式下,由于數(shù)據(jù)被視為原始字節(jié)流,不涉及任何編碼和解碼的操作,所以不需要(也不能)指定字符編碼方式。
文件類型: 有些文件(比如圖片,音頻,視頻等)是以二進(jìn)制格式存儲的,這些文件必須以二進(jìn)制模式打開。如果嘗試以文本模式打開這些文件,可能會導(dǎo)致數(shù)據(jù)的損壞。
因此,在處理文件時,應(yīng)根據(jù)文件的類型和需要處理的數(shù)據(jù)類型選擇適當(dāng)?shù)奈募蜷_模式。如果你需要處理的是文本數(shù)據(jù),那么通常應(yīng)使用文本模式。如果你需要處理的是二進(jìn)制數(shù)據(jù)(比如圖片或音頻文件),或者需要進(jìn)行低級的文件操作(比如讀寫固定數(shù)量的字節(jié)),那么應(yīng)使用二進(jìn)制模式。
#舉個栗子: import os txt = open("mytext.txt",'w') print("成功創(chuàng)建一個文本文件,文件名為mytext.txt") doc= open("myword.docx","wb+") print("成功創(chuàng)建一個word文件,文件名為myword.docx")
1.2寫入文件內(nèi)容:
文件創(chuàng)建成功后,就利用 write(string)
可以向文件中寫入內(nèi)容。
語法格式如下: write(string)
參數(shù)及注意事項說明:
string:
要寫入文件中的字符串。但需要注意的是,Python字符串可以是二進(jìn)制字符串。特別是當(dāng),文件以二進(jìn)制模式創(chuàng)建時, string
要利用 encode()
轉(zhuǎn)換為 bytes
形式,否則會報錯
注意事項:
write()
方法的返回值為寫入的字符長度;
2. write()
方法不會在字符串的末尾添加換行符;
3.在文件關(guān)閉或緩沖區(qū)刷新前,字符串內(nèi)容還存儲在緩沖區(qū)中,在文件中是看不到寫入的內(nèi)容的。
利用 close()
方法來關(guān)閉文件。
#舉個栗子 import os import chardet with open("mytxt.txt","wb+") as txt: txt.write("\n寫入的信息如下:".encode()) txt.write(("\n文件名:"+txt.name).encode()) txt.write(("\n創(chuàng)建的模式:"+txt.mode).encode()) txt.write("\n滿懷熱愛,奔赴星海\n".encode()) print(content)
運行結(jié)果:
1.3打開文件夾并讀取內(nèi)容
在Python中打開文件也用 open()
方法,與創(chuàng)建文件不同的只是 mode
模式不同。mode模式與含義見1.1表格。
import os mytxt = open("../mytxt.txt","r")#以只讀方式打開 str1 = mytxt.read(10)#獲取前10個字符 print("前10個字符為:",str1) str2 = mytxt.read()#讀取剩余內(nèi)容 mytxt = read() print("mytxt文件中的剩余全部內(nèi)容為: ",str2) mytxt.close()
1.4 設(shè)置文件中光標(biāo)的位置
當(dāng) mode
為 r,r+,rb,rb+
時,打開文件,光標(biāo)(文件指針)位于文件開頭。
當(dāng) mode
為 a,a+,ab,ab+
時,光標(biāo)位于文件末尾。
當(dāng)利用 read()
方法讀取文件中的部分內(nèi)容后,光標(biāo)就會移動到這部分內(nèi)容的后面。
通常,我們在讀取文件內(nèi)容時,可能不會從開頭開始讀取,而是從中間的某一位置開始讀取,且不一定是連續(xù)讀取,所以,我們可以利用 tell()方法
獲取光標(biāo)的當(dāng)前位置, tell()
方法的的返回值是光標(biāo)在文件中的當(dāng)前位置;
利用 seek()
方法設(shè)置光標(biāo)在文件中的當(dāng)前位置。
seek(offset[, whence])
參數(shù)說明:參數(shù) offset
用來設(shè)置偏移量,也就是代表需要偏移的字符數(shù),若為負(fù)數(shù)(逆序)則表示從倒數(shù)第多少位開始。 whence:
可選參數(shù),默認(rèn)值為0,該參數(shù)給 offset
設(shè)定了一個起始位置,(0:從文件開頭開始偏移 offset
;1:從當(dāng)前位置開始偏移 offset
;2:從文件末未開始偏移 offset
)
舉例說明:
import os s2 = "The error message you provided indicates a UnicodeDecodeError occurred while trying to decode a byte sequence using the 'gbk' codec. The specific error message suggests that there is an illegal multibyte sequence in the data you're trying to decode." with open("1.txt", "w+",) as mytxt: mytxt.write(s2) print("文件創(chuàng)建成功,并寫入了內(nèi)容。\n") print("讀取文件中的內(nèi)容:\n") with open("1.txt", "rb") as myt:#二進(jìn)制模式打開的文件對象支持隨機(jī)訪問和非零定位操作。 str_ = myt.read() # 讀取文件中的所有內(nèi)容 print(str_) print() position = myt.tell() # 獲取光標(biāo)的當(dāng)前位置 print("光標(biāo)的當(dāng)前位置為:", position) print() myt.seek(10, 0) str0 = myt.read(10) print(str0) print() myt.seek(10, 1) str1 = myt.read(10) print(str1) print() myt.seek(8, 2) str2 = myt.read(10) print(str2) print() myt.seek(-4, 2) str3 = myt.read(10) print(str3) print()
運行結(jié)果:
文件創(chuàng)建成功,并寫入了內(nèi)容。
讀取文件中的內(nèi)容:
b"The error message you provided indicates a UnicodeDecodeError occurred while trying to decode a byte sequence using the 'gbk' codec. The specific error message suggests that there is an illegal multibyte sequence in the data you're trying to decode."
光標(biāo)的當(dāng)前位置為: 249
b'message yo'
b' indicates'
b''
b'ode.'
2.文件夾的基本操作
2-1 文件夾的創(chuàng)建:
2-1-1.掌握一個方法: os.mkdir (path)
。
在Python中常用該方法來創(chuàng)建文件夾。
os.mkdir (path)
參數(shù)說明:
path
是創(chuàng)建文件夾的路徑。該方法沒有返回值
2-1-2.理解兩條“路徑”:
1.絕對路徑: 從磁盤的根目錄開始定位,直到對應(yīng)的位置為止。
2.相對路徑: 從當(dāng)前所在路徑開始定位,直到對應(yīng)的位置為止。用 “.” 表示當(dāng)前目錄;用“. .”表示上一級目錄
舉個栗子:
import os #------在相對路徑下創(chuàng)建文件夾---------------- #在當(dāng)前目錄下創(chuàng)建一個文件夾 os.mkdir("mydir1") #在當(dāng)前目錄的mydir1文件夾中創(chuàng)建一個子文件夾 os.mkdir("./mydir1/sub_mydir1") #在當(dāng)目錄的上一級目錄下創(chuàng)建一個文件夾 os.mkdir("../up_mydir1") #-------在絕對路徑下創(chuàng)建文件夾--------------- #在C盤根目錄下創(chuàng)建一個文件夾 os.mkdir("C:/mydir") #在C盤的mydir文件夾中創(chuàng)建一個子文件夾 os.mkdir("C:/mydir/sub_mydir") print("創(chuàng)建成功!")
注意: 如果你創(chuàng)建的文件夾已經(jīng)存在,重復(fù)創(chuàng)建就會報錯,(即,上述創(chuàng)建文件夾的程序如果成功執(zhí)行,再次運行就會報錯)。因此在創(chuàng)建文件夾時,我們最好先判斷在該目錄下是否存在同名的文件夾。
2-2判斷文件夾是否存在
掌握一個方法: os.path.exists(path)
在Python中,利用該方法來判斷文件夾的路徑。該方法返回值為 True
or False
。
舉個栗子
import os if os.path.exists("mydir1"): print("該文件夾已存在!") else: print("該文件夾不存在,可以新建。")
2-3 文件夾重命名
2-3-1.掌握一個方法: os.rename(src,dst)
。
在Python中,利用該方法對文件夾進(jìn)行重命名。
參數(shù)說明:
src:
文件夾原名;
dst:
文件夾新名;
2-3-2. 注意兩個要點:
1.在對一個文件夾重命名之前,先判斷該文件夾是否已經(jīng)存在,只有該文件夾已經(jīng)存在,才有文件夾重命名操作的對象。
2. 對具體目錄下的某一文件夾重命名時,需注意新名稱是否與該目錄下的其他文件夾重名。
舉個栗子
import os if os.path.exists("mydir1"): print("該文件夾存在,可以重命名。") if os.path.exists("new_mydir1") print("sorry,new_mydir 文件夾已存在") else: print("new_mydir1文件夾不存在可以重命名。") os.rename("mydir1","new_mydir1") print("重命名成功。") else: print("該文件夾不存在,無法進(jìn)行重命名操作!")
2-4 文件夾的刪除
2-4-1.一個方法:
os.rmdir(path)
在Python中,利用該方法來刪除文件夾。
path
為該文件夾的路徑,該方法沒有返回值.
4-2-2. 兩個要點:
1.在進(jìn)行刪除操作前,應(yīng)先判斷,要刪除的文件夾是否已經(jīng)存在(即刪除操作有無操作對象)
2. os.rmdir(path)
方法只能刪除空的文件夾,即文件夾中不能有文件夾或文件。否則操作無法執(zhí)行??梢岳?os.listdir(path)
方法來查看文件夾中的文件夾或文件。該方法返回一個列表,其中包含由路徑指定的目錄中條目的名稱。
舉個栗子:
import os if os.path.exists("C:/mydir"): print("該文件夾存在,可以刪除。") if len(os.listdir("C:/mydir/"))==0: os.rmdir("C:/mydir/") print("刪除成功") else: print("刪除操作無效,mydir 非空。") else: print("該文件夾不存在,無法刪除!")
2-5 文件操作工具-------shutil模塊的應(yīng)用
在上述文件夾的刪除操作中,我們知道 os.rmdir(path)
方法只能刪除空的文件夾。如果要刪除非空文件夾又該如何操作?這時我們可以用 shutil
模塊來實現(xiàn)。 shutil
模塊是一個高層次的文件操作工具,其強大之處在于對文件的復(fù)制與刪除操作較為簡便。
一個方法: shuitl.retree(path)
在Python中可利用 shuitl.retree(path)
方法來刪除非空文件夾。
舉個栗子:
import os import shutil if os.path.exists("C:/mydir"): print("該文件夾存在,可以刪除。") if len(os.listdir("C:/mydir/"))==0: os.rmdir("C:/mydir/") print("該空文件夾刪除成功") else: shutil.rmtree("C:/mydir/") print("mydir 非空。刪除成功。") else: print("該文件夾不存在,無法刪除!")
3. 與文件夾和文件有關(guān)的其他操作
3-1 獲取和修改當(dāng)前文件夾的位置
在Python中,利用 os.getcwd()
方法可以獲取當(dāng)前文件夾的位置,注意該方法沒有參數(shù)。使用 os.chdir(path)
可以修改當(dāng)前文件夾的位置。
3-2 連接目錄和文件名
Python中,利用 os.path.join(dir, filename)
方法可以連接目錄和文件名
參數(shù)說明:
dir
:文件的目錄
filename
:目錄中的文件名
舉例說明
import os str1 = os.getcwd() list_ = [] print("顯示當(dāng)前文件夾中包含的所有文件絕對路徑") for file in os.listdir(str1): filepath = os.path.join(str,file) list1.append(filepath) print(list1)
3-3 文件的屬性信息
在Python中,利用 os.stst(filename)
方法查看文件的屬性信息, filename
是要查看的文件名稱。
#文件中某個字全部替換為另一個字
import os import shutil def replace(filename,rep_word, new_word): f_read = open(filename,"w+") content = [] count = 0 for eachline in f_read: if rep_word in eachline: count += eachline.count(rep_word) eachline = eachline.replace(rep_word,new_word) content.append(eachline) decide = input("\n文件%s中共有%s個%s, 您確定要全部替換為%s嗎?\n Yes/No:"\ %(filename, count, rep_word,new_word)) if decide in ["YES","yes","Yes"]: f_write = open(filename,"w") f_write.write(filename) f_write.writelines(content) f_write.close() f_read.close() if __name__ == "__main__": filename = input("Please enter filename:") rep_word = input("Please enter the word you want to replace :") new_word = input("Please enter the new_word:") replace(filename,rep_word,new_word) str = open(filename,"r") print(str)
3-4文件的復(fù)制與刪除
在Python中,利用 shutil.copy(oldfile,newfile)
方法可以復(fù)制文件,其中, oldfile
為原來的文件名, newfile
副本的文件名。刪除文件可以使用 os.remove(file)
,其中參數(shù) file
為要刪除的文件名。
import os import shutil #復(fù)制文件 str = open("2.txt","w+") if os.path.exists("2.txt"): shutil.copy("2.txt","new_2.txt") str_copy = open("new_2.txt","r") print(str_copy) #刪除文件 if os.path.exists("new_1.txt"): os.remove("new_1.txt")
關(guān)于Python的文件操作,我們先分享到這里,謝謝各位大佬的閱讀。
到此這篇關(guān)于Python文件與文件夾操作(你想了解的基本都在這)的文章就介紹到這了,更多相關(guān)python文件與文件夾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pycharm在指定目錄下生成文件和刪除文件的實現(xiàn)
這篇文章主要介紹了Pycharm在指定目錄下生成文件和刪除文件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12新手該如何學(xué)python怎么學(xué)好python?
怎么學(xué)好python?怎么靈活應(yīng)用python?2008-10-10Flask框架Flask-Principal基本用法實例分析
這篇文章主要介紹了Flask框架Flask-Principal基本用法,結(jié)合實例形式分析了Flask框架flask-principal擴(kuò)展的基本功能、安裝、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下2018-07-07python 添加用戶設(shè)置密碼并發(fā)郵件給root用戶
這篇文章主要介紹了python 添加用戶設(shè)置密碼并發(fā)郵件給root用戶的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07