9. 檔案操作

hbutmeng發表於2024-07-23

1. 檔案的兩種開啟方式

方式一:開啟後複製給控制代碼,控制代碼操作檔案

控制代碼 = oopen(檔案路徑,操作模式,編碼格式)

其中操作模式有三種:

r 只讀模式 只能讀不能寫

w 只寫模式 只寫不能讀

a 只追加模式 檔案資料末尾新增內容

方式二:使用with關鍵字,自動開啟和自動關閉檔案

2. 檔案的讀寫方式

2.1 r 只讀模式

只能讀不能寫

檔案不存在時會報錯

with open('a.txt', 'r', encoding='utf-8') as f:
    data = f.read()

2.2 w 只寫模式

只能寫不能讀

檔案不存在時會自動建立一個檔案

w模式又稱覆蓋寫模式,每一次寫入資料時都將檔案原本的內容清空,再寫入新的資料

with open('c.txt', 'w', encoding='utf-8') as f:
    f.write('Lionel Messi')

2.3 a 只追加模式

如果檔案不存在則新建檔案並寫入資料

檔案資料末尾新增新的資料

with open('d.txt', 'a', encoding='utf-8') as f:
    f.write('Neymar')

3. 檔案的操作方式

3.1 + 模式

讓原本的模式擴充套件出新的模式

r+ 既能讀又能寫 這種模式下的寫是覆蓋寫

w+ 既能寫又能讀

不建議採用 + 模式,對於一個檔案來說要麼就是向其中寫入資料,要麼就是從其中讀取資料

3.2 b模式

二進位制模式 可以操作任意型別的檔案

r rb b不可省略

w wb b不可省略

a ab b不可省略

1. 該模式可以操作任意型別的檔案

2. 該模式一定不能指定encoding引數

3. 該模式讀寫都是以byte型別(二進位制)為最小單位

將以上讀取到的二進位制資料寫入到一個新的檔案

3.3 檔案讀寫程式碼舉例

# 先寫入一個列表
# num_list = [1, 2, 3]
# write() argument must be str, not list
# with open("1.text", "w", encoding="utf-8") as fp:
#     fp.write(str(num_list))

# 再讀取出來
# with open("1.text", "r", encoding="utf-8") as fp:
#     data = fp.read()
# print(data, type(data))  # <class 'str'>

# with open("2.text","a",encoding="utf-8") as fp:
#     fp.write("dream|521|666" + "\n")

'''
user_data = {}
with open("2.text", "r", encoding="utf-8") as fp:
    data = fp.read()
for i in data.split():
    username, password, hobby = i.split("|")
    user_data[username] = {
        "username": username,
        "password": password,
        "hobby": hobby
    }
print(user_data)
'''

4. 檔案操作的內建方法

4.1 r模式的內建方法

f.read() 一次將內容全部讀取出來

f.readline() 只讀取一行的資料

f.readlines() 讀取所有資料,但是每一行資料是列表中的一個元素

for i in f: 控制代碼可以被遍歷,遍歷得到的每一個元素是行

f.readable() 判斷當前控制代碼物件是否可讀

4.2 w模式的內建方法

f.write() 一次將所有內容全部寫入

f.writelines(列表) 將列表中的每一個元素首尾拼接後一次寫入

f.writeable() 判斷當前控制代碼物件是否可寫

在沒有退出with語句之前,連續write是可以持續寫入資料的