本文目錄一覽:
Python文件操作,看這篇就足夠!
文件的存儲方式
在計算機中,文件是以二進制的方式保存在磁盤上的文本文件和二進制文件
文本文件可以使用文本編輯軟件查看本質上還是二進制文件
二進制文件保存的內容不是給人直接閱讀的,而是提供給其她軟件使用的二進制文件不能使用文件編輯軟件查看
文件基本操作
在計算機中要操作文件一共包含三個步驟:1.打開文件2.讀、寫文件
讀 將文件內容讀入內容寫 將內存內容寫入文件
模式描述
t文本模式 (默認)。
x寫模式,新建一個文件,如果該文件已存在則會報錯。
b二進制模式。
+打開一個文件進行更新(可讀可寫)。
U通用換行模式(不推薦)。
r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
rb以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。一般用於非文本文件如圖片等。
r+打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。一般用於非文本文件如圖片等。
w打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb以二進制格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。
w+打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb+以二進制格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。
a打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
ab以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
a+打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
ab+以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。
文件打開模式有很多,但是我們實際用到的就只有六種。
我們總結一下主要用到的是下面六種
模式可做操作若文件不存在是否覆蓋文件原來內容
r只讀報錯——
r+可讀、可寫報錯是
w只寫創建是
w+可讀、可寫創建是
a只寫創建否,追加寫
a+可讀、可寫創建否,追加寫
只讀模式打開文件——只讀(r)
文件若不存在報錯:
讀寫模式打開文件——讀寫模式(r+)
數據寫入之前:
數據寫入之後:
會替換掉相同長度的內容
文件若不存在報錯:
寫模式打開文件——寫模式(w)
數據寫入之前:
數據寫入之後:
這種操作會刪除原來的文件內容,重新寫入Python,
並且把光標放在文件最開始。
若文件不存在,系統會創建該文件夾並重新寫入內容
讀寫模式打開文件——讀寫模式(w+)
數據寫入之前:
數據寫入之後:
這種操作會刪除原來的文件內容,重新寫入Python,
並且把光標放在文件最開始。
若文件不存在,系統會創建該文件夾並重新寫入內容
利用這個原理所以文件寫模式(w)、讀寫模式(w+)還可以用作刪除文件內容。
因為他們整個工作原理就是把文件原來的內容刪除,然後寫入新的內容。
如果我們寫入的內容為空,那麼不就是刪除文件內容。
數據寫入之前:
數據寫入之後:
寫模式打開文件(追加內容)——寫模式(a)
數據寫入之前:
數據寫入之後:
可以看到是在原先內容的基礎上在文末追加新的內容!
若文件不存在,系統會創建新的文件夾並寫入內容
讀寫模式打開文件(追加內容)——讀寫模式(a)
數據寫入之前:
數據寫入之後:
可以看到是在原先內容的基礎上在文末追加新的內容!
若文件不存在,系統會創建新的文件夾並寫入內容
二進制模式打開文件
我們看到了在文件打開模式中有以下模式:rb、wb……有這種帶 b 的。
什麼意思呢?
就是用二進制的方式打開文件。
很明顯,我們出現了以下錯誤:
主要原因是因為編碼的問題,可能是因為0x82這個位元組在gbk編碼中沒有這個字符,
可能原字符是兩個位元組,在gbk里被解析成了一個位元組,導致字符不存在。
這就是我們文件打開方式需要使用二進制讀取的原因。
文件操作
open 函數負責打開文件,並且返迴文件對象
read /write / close 三個方法都需要通過文件對象 來調用
文件和文件夾的操作
在Python中⽂件和⽂件夾的操作要藉助os模塊⾥⾯的相關功能,
具體步驟如下:
導⼊os模塊
使⽤ os 模塊相關功能
1、文件重命名
2、刪除文件
3、創建文件夾
4、刪除文件夾
5、獲取當前目錄
6、改變默認目錄
7、獲取目錄列表
如何用python刪除一個文件
使用Python刪除文件有多種方法,但是最好的方法如下:
os.remove()刪除文件
os.unlink()刪除文件
shutil.rmtree()刪除目錄及其下面所有內容
pathlib.Path.unlink()在Python3.4及更高版本中用來刪除單個文件pathlib模塊。
os.remove()刪除文件
Python中的OS模塊提供了與操作系統進行交互的功能。OS屬於Python的標準實用程序模塊。該模塊提供了使用依賴於操作系統的功能的便捷式方法。
python中的os.remove()方法用於刪除文件路徑。此方法無法刪除目錄。如果指定的路徑是目錄,則該方法將引發OSError。
注意:可以使用os.rmdir()刪除目錄。
使用os.unlink()刪除Python文件
os.unlink()是os.remove()的別名。在Unix OS中,刪除也稱為unlink。
注意:所有功能和語法與os.unlink()和os.remove()相同。它們都用於刪除Python文件路徑。兩者都是Python標準庫的os模塊中執行刪除功能的方法。
它有兩個名稱,別名:os.unlink()和os.remove()。
為同一個函數提供兩個別名的可能原因是,該模塊的維護者認為,許多程序員可能會從C的底層編輯轉向Python,其中庫函數和底層系統調用稱為unlink(),而其他人則可能會使用rm命令或shell腳本來簡化語言。
使用shutil.rmtree()刪除Python文件
shutil.rmtree():刪除指定的目錄,所有子目錄和所有文件。此功能特別危險,因為它無需檢查即可刪除所有內容。結果,您可以使用此功能輕鬆丟失數據。
rmtree()是shutil模塊下的一種方法,該方法以遞歸方式刪除目錄及其內容。
使用pathlib.Path.unlink()刪除文件
pathlib模塊在Python3.4及更高版本中可用。如果要在Python2中使用此模塊,可以使用pip進行安裝。pathlib提供了一個面向對象的界面,用於處理不同操作系統的文件系統路徑。
要使用pathlib模塊刪除文件,請創建一個指向該文件的Path對象,然後對該對象調用unlink()方法。
python 學習,需要有哪些基礎呢?
1、有較強的邏輯思維能力
幾乎所有編程語言的學習都離不開較強的邏輯思維能力,因為編程語言是人與計算機的對話,任何歧義和差錯都會影響最終的運行效率。
2、有較強的數理專業背景
學習Python最理想的專業有數學、統計學、物理學、計算機科學等專業,因為Python語言所操作的對象很可能是大數據收集與分析,以及AI開發領域,有以上的學科背景會對今後的發展有很好的優勢。
3、有豐富的運維經驗
可能很多學計算機的同學在畢業之後從事了服務器、後台管理的運維工作,這既有優勢、也有劣勢。所謂優勢就是有現成的成品擺在你面前,你在做運維的過程中會對產品開發理解更加充分,然而劣勢就在於對自身的技術提高幫助可能比較有限。這時學Python,更在於從運維轉開發,這也是對自己職業生涯的一種新規劃。
4、從事Web全棧開發工作
以前開發web,Java是主角,但如今越來越多的web開發開始青睞於Python,究其原因其實也是因為網絡數據量的日益龐大以及人工智能的普及,所以精通Python語言對於從事web全棧開發將有積極的影響。
Python 文件操作
open(filename[,mode,encoding=”編碼”]) :第一個參數文件名如果不加路徑,默認在該py文件目錄下(路徑舉例: E:/XXX或E:\\xxx ),第二個是模式,默認為 ‘r’ ——只讀,舉例: f = open(‘E:/abc.txt’) ,如果要轉編碼並寫入模式:
f = open(‘E:/abc.txt’,’w’,encoding=’utf-8′)
1. 模式
2. 方法
(1) close() : 關閉文件,因為文件寫入時是寫在內存,只有關閉時才寫入硬盤,所以寫完記得關閉
(2) read(size = -1) :讀取文件size個字符,不寫默認是-1,此時讀取所有內容(換行按\n來表示,很不好看),並作為字符串返回,一定要注意 讀完以後文件指針將會指向末尾 ,所以下一次在用read方法時會發現讀取不出內容了,所以這個就要用seek移動指針或者關閉文件重新定義
(3) tell() :返回當前文件指針指向的位置
(4) seek(offset,from) :移動文件指針,代表從from參數開始偏移offset個位元組,0代表起始位置,1代表當前位置,2代表文件末尾
(5) readline() :按序列讀取一行內容,默認\n為邊界
(6) write() :寫入內容,但必須要有寫入權限才行,否則報錯,寫完會返回寫入的長度,例如: len1 = f.write(‘abc’) ,此時len1就為3
(7) truncate() :刪除內容,把當前指針以後的內容全刪了,舉例:
註:
1.文件還可以轉化為 list 之類的,例如: list1 = list(f) ,此時文件內容的按\n被隔開,然後可以用for語句讀取文件所有內容,舉例:
2.上面輸出文件內容方法相對低效,所以一般都直接用for輸出整個文件,舉例:
通過 fileno 函數,我們可以查看一個文件對應的文件描述符,對應的是程序中打開的文件序號,舉例:
可以看出python在啟動時會先啟動標準流的文件(文件描述符分別為:0/1/2),所以之後打開的文件就從3開始遞增,當釋放一個文件資源時,該描述符序號被釋放,之後打開的文件可以繼續使用該序號的文件描述符
python中的 print 的本質是通過 sys.stdout 來進行內容輸出,而 sys.stdout 的本質是一個”文件”,相當於我們所有的輸入輸出的本質都是在對 sys.stdin / sys.stdout / sys.stderr 這些文件來進行讀寫操作,舉例:
open 函數不僅可以打開本地文件,也可以打開文件描述符,而該參數默認為 True ,代表 close 後會將對應的文件資源釋放,而對於一些文件描述符,我們只是希望 close 時將打開文件描述符的對象釋放,而不釋放對應的文件資源,那麼則可以設置 closefd=False ,舉例:
需要使用到 chardet 模塊,按二進制可讀打開文件,然後通過 detect() 方法查看,舉例:
所以就可以根據文件來設置編碼了:
有時候使用文件的編碼解碼也可能會出現無法解析的情況,例如兩種編碼混在同一個文件里的時候,此時可以設置 errors 參數為 ignore 來避免該問題,示例:
可用 os 模塊下的 chmod() 函數,具體參考:
使用 os 模塊下的 remove() 函數可以實現刪除文件,舉例:
可以使用自帶的 zipfile 模塊來進行操作,舉例:
可以使用自帶的 tarfile 模塊來進行操作,舉例:
python操作文本文件
在磁盤上讀寫文件之前,必須先打開這個文件。打開文件就需要提供文件的路徑。
在與Python程序同一個目錄下,我們有一個名為 pi.txt 的文件,它的內容如下:
現在使用Python來打開和關閉它:
執行此程序不會有任何輸出,這表示着打開和關閉文件都得到了正確執行。
可以看到,使用 open() 函數打開文件,參數為文件名(或文件路徑);該函數會返回一個文件句柄,文件句柄並不會實際保存文件的內容,而是代表着一種操作,在上面的例子中,文件句柄被賦值給變量 fhand 。
打開文件後,程序具有讀(默認)該文件的權限。
最後,使用文件句柄的 close() 方法關閉文件。這非常重要,因為使用完而沒有關閉的文件會佔用內存或造成安全問題。
如果Python找不到該文件,則會返回錯誤,比如下面這樣:
Python提示我們沒有相應的文件或者目錄: ‘pii.txt’。
打開文件後就可以對文件進行操作:
fhand.read() 方法將文件內容作為一個字符串返回。
文件中的每一行末尾使用換行符 \n 表示換行,例子中方法 rstrip() 去掉文本中的換行符,然後輸出。
程序的運行效果如下:
如果在文件關閉之前程序發生BUG意外退出,則文件不會關閉,為了避免此類事件的發生,可以使用 with 語句:
with 語句的特點是即便在操作文件時發生錯誤,文件也會自動被清理。
fhand.read() 雖然可以讀取文本內容,但是當我們想要逐行處理文件內容,或者文件很大而無法一次性加載進內存的時候,就不適用了。
可以使用 for 語句逐行處理文件內容:
本程序中將文件名保存在變量 filename 中。
打開文件後,使用 for 語句按行讀取文件內容。例子中,每次循環依次取一行文本以字符串的格式保存在變量 line 中,每次循環中變量 count 自增1。
這個程序的作用是,打開程序所在目錄的 when_old.txt 文件,然後統計行數,並輸出結果。
when_old.txt 文件的內容是:
可以使用其他方法操作字符串 line :
程序將以 ‘And’ 開頭的行打印出來。
打開文件後,默認的權限是讀(r),如果要寫文件,則需要使用寫(w)或者追加(a)權限。
w權限,打開一個文件用於寫入。如果該文件存在,則覆蓋該文件;如果該文件不存在,則創建該文件。
a權限,打開一個文件用於追加。如果該文件存在,在文件末尾追加;如果該文件不存在,則創建該文件。
下面是一個使用w權限打開文件的例子:
例子中使用w權限打開該文件,並寫入兩行。(如果該文件存在,則內容會被覆蓋)
fhand.write() 不會自動添加換行符,所以如果需要換行,需在末尾添加 \n 。
下面我們寫一個統計文件中詞頻的程序。
它會統計文件中各個詞的出現的次數,然後由高到低顯示出前5個詞。
首先我們完成打開和關閉文件的程序內容:
在例子中,由用戶輸入文件名,並且使用異常捕獲以處理文件打開時的錯誤。
下面對內容進行統計:
這個程序:
如此,我們就在字典中存放了 單詞:次數 的鍵值對。
由於字典不能保存順序,所以不能對其進行排序。為此,將每個鍵值對都添加到一個列表中:
在列表 word_list 中,每一項都是一個元組,每個元組第一個值是單詞出現的次數,第二個值是單詞內容。
對其進行逆向(由大到小)排序:
打印最終結果:
整個程序如下:
下面是程序運行結果的示例:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/279027.html