1. 程式人生 > >python學習筆記14(檔案讀寫)

python學習筆記14(檔案讀寫)

檔案讀寫

讀檔案

python讀檔案流程:
1、開啟檔案
2、讀檔案內容
3、關閉檔案

註釋:
1、開啟檔案
open(path, flag[, encoding][, errors])
path: 要開啟檔案的路徑(路徑前加r)
flag: 開啟方式:
r----以只讀的方式開啟檔案,檔案的描述符放在檔案的開頭
rb----以二進位制格式開啟一個檔案用於只讀,檔案的描述符放在檔案的開頭
r±—開啟一個檔案用於讀寫,檔案的描述符放在檔案的開頭
w----開啟一個檔案只用於寫入,如果該檔案已經存在會覆蓋,如果不存在則建立新檔案
wb----開啟一個檔案值用於寫入二進位制,如果該檔案已經存在會覆蓋,如果不存在則建立新檔案
w±—開啟一個檔案用於讀寫
a----開啟一個檔案用於追加,如果檔案存在,檔案描述符將會放到檔案末尾
encoding:

編碼方式
errors: 錯誤處理

示例:

path = r"C:\Users\xgg\Desktop\Python\檔案讀寫\file1.txt"
#ignore  忽略錯誤
#f = open(path, "r", encoding="utf-8", errors="ignore")
f = open(path, "r", encoding="utf-8")

2、讀檔案內容

#1、讀取檔案全部內容
str1 = f.read()
print(str1)

#2、讀取指定字元數
#str2 = f.read(10)
#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、讀取所有行並返回列表
#list7 = f.readlines()
#print(list7)

#6若給定的數字大於0,返回實際size位元組的行數
#list8 = f.readlines(25)
#print(list8)

print("*****")
#修改描述符的位置
f.seek(10)

str9 = f.read()
print(str9)

3、關閉檔案

f.close()

完整的示例

try:
    f1 = open(path, "r", encoding="utf-8")
    print(f1.read())
finally:
    if f1:  
        f1.close()

with……as 語句:
作用: 用於某些任務,可能事先需要設定,事後要做清理工作。
用法: with所求值的物件必須有一個__enter__()方法,一個__exit__()方法,緊跟with後面的語句被求值後,返回物件的__enter__()方法被呼叫,這個方法的返回值將被賦值給as後面的變數。當with後面的程式碼塊全部被執行完之後,將呼叫前面返回物件的__exit__()方法。

#用with   as語句讀檔案
with open(path, "r", encoding="utf-8") as f2:
    print(f2.read())

寫檔案
寫檔案過程:
1、將資訊寫入緩衝區

f.write("sunck in")

2、重新整理緩衝區: 直接把內部緩衝區的資料立刻寫入檔案,而不是被動的等待自動重新整理緩衝區寫入

f.flush()

完整示例:

f = open(path, "a")    #開啟檔案
f.write("sunck in")    #寫入字串
f.flush()     #重新整理
f.close()    #關閉檔案

with open(path, "a") as f2:
    f2.write("good man")

使用pickle包讀寫
用來讀寫list、tuple、dict、set檔案操作

示例:

import pickle   #資料永續性模組

myList = (1,2,3,4,5,"sunck is a good man")
path = r"C:\Users\xgg\Desktop\Python\檔案讀寫\file.txt"
f = open(path, "wb")    #開啟檔案
pickle.dump(myList, f)    #寫入
f.close()    #關閉

#讀取
f1 = open(path, "rb")    #開啟
tempList= pickle.load(f1)   #載入
print(tempList)    
f1.close()    #關閉