Python從零開始學 Day07~文件處理(初步)
本文是上一篇文章的後續,詳情點擊該鏈接~
創建文件對象open()
我們在上一集異常處理的時候,就使用過這種操作
打開的方式有以下幾種:
模式 | 描述 |
r | 讀read模式 |
w | 寫write模式。如果文件不存在則創建;如果文件存在,則重寫新內容; |
a | 追加append模式。如果文件不存在則創建;如果文件存在,則在文件末尾追加內容 |
b | 二進制binary模式(可與其他模式組合使用) |
+ | 讀、寫模式(可與其他模式組合使用) |
先來個簡單的操作(本文就一直用桌面目錄好了):
f = open(r"C:\Users\36961\Desktop\alvin.txt","a")
word = "hello world Python"
f.write(word)#寫入
f.close()#關閉
在操作文本文件時,經常會操作中文,這時候就經常會碰到亂碼問題。先來看看各種編碼之間的關係。
關於哪些理論呢,這裏就不囉嗦了,百度也是一大堆。我就直接擼代碼了~
writelines()寫入字符串列表
f = open(r"C:\Users\36961\Desktop\alvin.txt","a")
word = ['你好\n','我\n','想\n','和你們\n','做朋友']
f.writelines(word)#寫入
f.close()#關閉
close()關閉文件流
由於文件底層是由操作系統控制,所以我們打開的文件對象必須顯式調用close()方法關閉文件對象。當調用close()方法時,首先會把緩衝區數據寫入文件(也可以直接調用flush()方法),再關閉文件,釋放文件對象。
爲了確保打開的文件對象正常關閉,一般結合異常機制的 finally或者with 關鍵字實現無論何種情況都能關閉打開的文件對象。
所以說,這纔是我們最常用的~
try:
f = open(r"C:\Users\36961\Desktop\alvin.txt", "a")
word = ['你好\n', '我\n', '想\n', '和你們\n', '做朋友']
f.writelines(word) # 寫入
except BaseException as e:
print(e)
finally:
f.close()#關閉
with語句(上下文管理器)
with關鍵字(上下文管理器)可以自動管理上下文資源,不論什麼原因跳出with 塊,都能確保文件正確的關閉,並且可以在代碼塊執行完畢後自動還原進入該代碼塊時的現場。
word = ['你好\n', '我\n', '想\n', '和你們\n', '做朋友']
with open(r"C:\Users\36961\Desktop\alvin.txt", "a") as f:
f.writelines(word) # 寫入
文本文件的讀取
read([size])
從文件中讀取 size 個字符,並作爲結果返回。如果沒有 size 參數,則讀取整個文件。讀取到文件末尾,會返回空字符串。
readline()
讀取一行內容作爲結果返回。讀取到文件末尾,會返回空字符串。
readlines()
文本文件中,每一行作爲一個字符串存入列表中,返回該列表
話不多說,擼代碼~
把文件裏面的字讀進來,也可以在read裏面選擇需要都進來的字符數
with open(r"C:\Users\36961\Desktop\alvin.txt","r",encoding="utf-8") as f:
print(f.read())
按行讀取一個文件
with open(r"C:\Users\36961\Desktop\alvin.txt","r",encoding="utf-8") as f:
while True:
frag = f.readline()
if not frag:
break
else:
print(frag,end=" ")
二進制文件的讀取和寫入
二進制文件的處理流程和文本文件流程一致。首先還是要創建文件對象,不過,我們需要指定二進制模式,從而創建出二進制文件對象。
f = open(r"C:\Users\36961\Desktop\alvin.txt","wb") #可寫的、重寫模式的二進制文件對象
f = open(r"C:\Users\36961\Desktop\alvin.txt","ab") #可寫的、追加模式的二進制文件對象
f = open(r"C:\Users\36961\Desktop\alvin.txt","rb") #可讀的二進制文件對象
創建好二進制文件對象後,仍然可以使用 write()、read()實現文件的讀寫操作。
來,我們拷貝下圖片試試?
with open('C://Users//36961//Desktop//IOStudy//timg.jpg','rb') as f: #讀
with open('C://Users//36961//Desktop//IOStudyPlus//timg.jpg','wb') as w: #寫
for line in f.readlines():
w.write(line)
拷貝成功了~
文件對象的常用屬性
name | 返回文件的名字 |
mode | 返回文件的打開模式 |
closed | 若文件被關閉則返回True |
文件對象的常用方法
write(str) | 將字符串 str內容寫入文件 |
flush() | 把緩衝區的內容寫入文件,但不關閉文件 |
close() | 把緩衝區內容寫入文件,同時關閉文件,釋放文件對象相關資源 |
read([size]) | 從文件中讀取size 個字節或字符的內容返回。若省略[size],則讀 取到文件末尾,即一次讀取文件所有內容 |
readlines() | 把文本文件中每一行都作爲獨立的字符串對象,並將這些對象放入 列表返回 |
writelines(s) | 將字符串列表 s 寫入文件文件,不添加換行符 |
seek(offset) | 把文件指針移動到新的位置, offset 表示相對於whence 的多少個 |
([whence]) | 字節的偏移量; offset:off 爲正往結束方向移動,爲負往開始方向移動 whence 不同的值代表不同含義: 0: 從文件頭開始計算(默認值) 1:從當前位置開始計算 2:從文件尾開始計算 |
tell() | 返回文件指針的當前位置 |
truncate([size]) | 不論指針在什麼位置,只留下指針前 size 個字節的內容,其餘全
部刪除; 如果沒有傳入 size,則當指針當前位置到文件末尾內容全部刪除 |
readline() | 從文本文件中讀取一行內容 |