python3筆記十七:python文件讀寫


一:學習內容

  • 讀文件
  • 寫文件
  • 編碼與解碼

 

二:讀文件--步驟分解

1.過程

第一步:打開文件
第二步:讀文件內容
第三步:關閉文件

 

2.第一步:打開文件

open(path,flag[,encoding][,errors])

參數說明:
path:要打開文件的路徑
flag:打開方式(
r:以只讀的方式打開文件,文件的描述符放在文件開頭
rb:以二進制格式只讀的方式打開文件,文件的描述符放在文件開頭
r+:打開一個文件用於讀寫,文件描述符放在文件的開頭
w:打開一個文件只用於寫入,文件的描述符放在文件的開頭,如果該文件已經存在會覆蓋,如果不存在則創建新文件
wb:打開一個文件只用於寫入二進制,如果該文件會覆蓋,如果該文件不存在新創建文件
w+:打開一個文件用於讀寫,如果該文件存在會覆蓋,如果該文件不存在新創建文件
a:打開一個文件用於追加,如果文件存在文件描述符將會被放到文件末尾
a+:打開一個文件用於追加
encoding:編碼方式
errors:錯誤處理

 

path = r"F:\python_test\read_practice.txt"
#f = open(path,"r",encoding="utf-8",errors="ignore")   #ignore 忽略錯誤
f = open(path,"r",encoding="utf-8")

 

3.第二步:讀文件內容

#法1、讀取文件全部內容,適合讀文件比較小的
str1 = f.read()
print(str1)

#法2、讀取指定字符數
str2 = f.read(10)  #讀取文件10個字符,1個中文是1個字符
print(str2)
str3 = f.read(10)   #繼續上一次讀取結束的位置繼續讀取
print(str3)

#法3、讀取整行包括"\n"字符
str4 = f.readline()
print(str4)
str5 = f.readline()  #繼續下一行讀取
print(str5)

#法4、讀取指定字符數
str6 = f.readline(10)
print(str6)

#法5、讀取所有行包括"\n"字符並返回列表
list7 = f.readlines()
print(list7)

#法6、若給定的數字大於0,返回實際size字符的行數
list7 = f.readlines(25)
print(list7)

#修改文件描述符位置
f.seek(0)
str9 = f.read()
print(str9)

 

4.第三步:關閉文件

f.close()

 

三:讀文件--完整過程

1.法一
try:
    f1 = open(path,"r",encoding="utf-8")
    print(f1.read())
finally:
    if f1:   #打開失敗時f1對象還未創建就不用關閉了
        f1.close()

 

2.法二,最簡潔的寫法,不用自己手動去close了

with open(path,"r",encoding="utf-8") as f2:
    print(f2.read())

 

四:寫文件--步驟分解

1.過程

第一步:打開文件
第二步:寫文件內容
第三步:關閉文件

 

2.刷新緩沖區兩種方式

自動刷新  f.close()
手動刷新  f.flush()

 

3.第一步:打開文件

path = r"F:\python_test\write_practice.txt"
f = open(path,"w",encoding="utf-8")

 

4.第二步:寫文件

#將信息寫入緩沖區
f.write("tester is a good girl")


#刷新緩沖區,就能寫入文件
#直接把緩沖區的數據立刻寫入文件,如果沒有寫刷新緩沖區則會在關閉文件時在把緩沖區寫入文件
f.flush()

 

5.第三步:關閉文件

f.close()

五:寫文件--完整過程

1.法一
try:
    f1 = open(path,"w",encoding="utf-8")
    f1.write("good girl")
finally:
    if f1:   #打開失敗時f1對象還未創建就不用關閉了
        f1.close()

 

2.法二-覆蓋寫入,簡潔的寫法,不用自己手動去close了

with open(path,"w",encoding="utf-8") as f2:
    f2.write("good girl")

 

3.法三-追加寫入,簡潔的寫法,不用自己手動去close了

with open(path,"a",encoding="utf-8") as f3:
    f3.write("young girl")

 

執行完法二和法三的結果:文件被寫入內容

 

六:編碼與解碼

1.說明

不是二進制時:
文件打開的編碼要一致,即寫文件和讀文件open中的encoding要一致


二進制文件時:
文件寫入讀取的編碼要一致

 

2.不是二進制文件讀寫操作

path = r"F:\python_test\encode_file.txt"

with open(path,"w",encoding="utf-8") as f1:
    str = "tester is a good girl測試"
    f1.write(str)

with open(path,"r",encoding="utf-8") as f2:
    data = f2.read()
    print(data)
    print(type(data))

 

3.二進制文件讀寫

path = r"F:\python_test\encode_file.txt"

#with open(path,"wb",encoding="utf-8") ,當方式里有b時,不能有encoding參數,否則會報錯binary mode doesn't take an encoding argument
with open(path,"wb") as f1:
    str = "tester is a good girl測試"
    f1.write(str.encode("utf-8"))

with open(path,"rb") as f2:
    data = f2.read()
    print(data)
    print(type(data))
    newData = data.decode("utf-8")
    print(newData)
    print(type(newData))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM