Python從零開始學 Day07~文件處理(初步)

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() 從文本文件中讀取一行內容
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章