檔案處理,檔案的開啟模式,檔案修改的兩種方式

2022-08-28 13:48:14 字數 3916 閱讀 2596

※檔案處理

'''1. 什麼是檔案

檔案是作業系統為應用程式或者使用者提供一種操作硬碟的虛擬單位

強調:檔案是作業系統提供的虛擬單位

應用程式或者使用者對檔案的讀寫操作其實都是向作業系統傳送指令

2. 為何要用檔案

檔案對應的硬碟空間,如果需要考慮永久儲存資料那必須使用檔案

3. 如何用檔案

'''# 路徑問題

# 絕對路徑:

# win: c:\a\b\c\d.txt

# linux: /a/b/c/d.txt

# 相對路徑: 相對於當前執行檔案所在資料夾

# a/b/c/d.txt

#1 開啟檔案

# f=open(r'd:\脫產5期內容\day09\a.txt',mode='rt',encoding='utf-8')

# print(f)

#2 讀/寫檔案

# data=f.read()

# print(data)

#3 關閉檔案

# f.close() # 向作業系統傳送指令,讓作業系統關閉開啟的檔案,**作業系統資源

# print(f)

# f.read()

# 上下文管理

with open('a.txt',mode='rt',encoding='utf-8') as f:

data=f.read()

print(data)

※※檔案的開啟模式

# 一. 基本介紹

# 控制檔案讀寫操作的模式

# r(預設)

# w# a

# 控制檔案讀寫內容的模式(不能單獨使用,必須與r、w、a連用)

# t(預設)

# b# 二. 詳細介紹

# 控制檔案讀寫操作的模式

# r(預設):唯讀模式,以該模式開啟檔案,當檔案不存在時則報錯,當檔案存在時檔案指標在檔案開頭

# with open('a.txt',mode='rt',encoding='utf-8') as f:

# data=f.read()

# print(f.readable())

# print(f.writable())

# for line in f:

# print(line)

# print(f.readlines())

# pass

# w: 只寫模式,以該模式開啟檔案,當檔案不存在時建立乙個空文件,當檔案存在時清空檔案內容,檔案指標在檔案開頭

# with open('a.txt',mode='wt',encoding='utf-8') as f:

# print(f.readable())

# print(f.writable())

# 在開啟了檔案不關閉的情況下,連續的寫入,新寫的內容總是跟在老內容之後

# f.write('你的名字\n')

# f.write('我不知道\n')

# f.write('也不想知道\n')

# lines=['1111\n','2222\n','3333\n']

# for line in lines:

# f.write(line)

# f.writelines(lines)

# f.write('aaaa\nbbb\ncccc\n')

# a: 只追加寫模式,以該模式開啟檔案,當檔案不存在時建立乙個空文件,當檔案存在時不清空檔案內容,檔案指標跳到檔案末尾

# with open('c.txt',mode='at',encoding='utf-8') as f:

# f.write('你好,我不喜歡你\n')

# f.write('henry\n')

# f.writelines([1,2,3])

# 控制檔案讀寫內容的模式(不能單獨使用,必須與r、w、a連用)

# t(預設):無論讀寫都是以字元為單位的,只能操作文字檔案,必須指定encoding引數

# b:無論讀寫都是以bytes為單位的,可以操作所有檔案,一定不能指定encoding引數

# with open('a.txt',mode='rb') as f:

# data=f.read()

# print(data,type(data))

# print(data.decode('utf-8'))

# with open('01.mp4',mode='rb') as f:

# data=f.read()

# print(data,type(data))

# with open('a.txt',mode='wb') as f:

# f.write('字元行啊士大夫阿史蒂芬撒旦發'.encode('utf-8'))

# 練習:拷貝檔案小程式

# with open('01.mp4',mode='rb',) as read_f,\

# open(r'd:\1111.mp4',mode='wb') as write_f:

# data=read_f.read()

# write_f.write(data)

# 了解:

# +:不能單獨使用,必須與rwa連用,r+ w+ a+

# with open('a.txt','r+t',encoding='utf-8') as f:

# # print(f.readable())

# # print(f.writable())

## data=f.readline()

# print(data)

# f.write('周仔仔')

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

# print(f.readable())

# print(f.writable())

f.seek(10)

# print(f.tell())

f.write('你好啊')

※※※檔案修改的兩種方式:

# 方式一:

# 1. 以讀的方式開啟原始檔

# 2. 將檔案內容一次性全讀入記憶體,在記憶體完成修改

# 3. 以寫的方式開啟原始檔,然後將修改後的結果一次性寫入原始檔

# 總結:

# 優點:在檔案修改過程中硬碟只存在乙份資料

# 缺點:浪費記憶體

with open('b.txt',mode='rt',encoding='utf-8') as f1:

msg=f1.read()

new_msg=msg.replace('alex','大sb')

with open('b.txt',mode='wt',encoding='utf-8') as f2:

f2.write(new_msg)

# 方式二

# 1. 以讀的方式開啟原始檔,以寫的方式開啟乙個臨時檔案

# 2. 讀取原始檔的一行內容到記憶體中,將修改的結果寫入臨時檔案,迴圈往復直到改

# 3. 刪除原始檔,將臨時檔案重新命名為源檔名

# 優點:同一時間在記憶體中只有檔案的一行內容,更節省內容

# 缺點:在檔案修改過程中硬碟只存在兩份資料

import os

with open('b.txt',mode='rt',encoding='utf-8') as read_f,\

open('.b.txt.swap',mode='wt',encoding='utf-8') as write_f:

for line in read_f:

write_f.write(line.replace('大sb','alex'))

os.remove('b.txt')

os.rename('.b.txt.swap','b.txt')

檔案的開啟模式

1.ofstream 寫資料 ifstream 讀資料 fstream ofstream ifstream 建立fstream物件時,應指定檔案開啟模式 mode 模式 description 描述 ios in 開啟檔案讀資料 ios out 開啟檔案寫資料 ios ate 開啟檔案,把檔案游標移...

linux檔案開啟模式

檔案開啟 int open const char pathname int flags mode t mode 普通方式 canonical mode flags中沒有設定o sync and o direct。這種方式中read是阻塞呼叫 blocking call 等到磁碟資料讀取完畢後返回 w...

linux檔案開啟模式

檔案開啟 int open const char pathname int flags mode t mode 普通方式 canonical mode flags中沒有設定o sync and o direct。這樣的方式中read是堵塞呼叫 blocking call 等到磁碟資料讀取完成後返回 ...