Python第九天課程回顧
文件指針移動
文件指針,就是我們在文本文件上經常會看見的一閃一閃亮晶晶的豎杠(丨),在文件內指針的移動除了在t模式下的read是以字符為單位移動的,其他都是以bytes為單位移動的。
示例:現有用戶數據庫裏存放的(你a好啊) f.read(3)就是前三個字符 with open(‘用戶數據庫.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f: with open(‘用戶數據庫.txt‘,mode=‘rb‘) as f:
data=f.read(3) data=f.read(3)
print(data) print(data)
你a好 會以二進制類型打印出來‘你’(b模式則是以bytes為單位的)
那麽我們如果想控制指針位置就需要用到一個功能:f.seek()
f.seek()分為三種模式
0模式:f.seek模式的默認模式,f.seek0模式移動的字節是以文件開頭為參照物開始移動的,需要強調的是0模式可以在tb兩種模式下使用,而1,2模式則只能在b模式下使用。
1模式:f.seek1模式則是以當前指針所在位置為參照物來移動字節的
2模式:f.seek2模式則是以文件末尾為參照物來移動字節的
f.tell():查看文件指針距離文件開頭的距離
文件修改
在了解文件之前我們首先要知道,我們所謂的文件是保存在硬盤當中的,而我們所做的對文件的添加刪除或修改,都是在硬盤上更新內容,而新的內容則會覆蓋掉之前的內容。但是內存則是可以通過控制去修改的
with open(‘a.txt‘,‘r+t‘,encoding=‘utf-8‘) as f: f.seek(4,0) print(f.tell()) f.write(‘我擦嘞‘) 此處則會覆蓋掉f.seek(4,0)之後的內容
那我們現在知道了硬盤對應文件,既然說硬盤不可以修改那也就是說文件也不可以修改,那麽我們看的的我們在文件裏的具體操作究竟是怎麽實現的呢?起始就是將文件讀入內從,通過內存修改之後再覆蓋掉源文件。
具體的實現方式分為兩種:
1.將文件內容一次性全部讀入到內存,然後在內存中修改然後覆蓋掉源文件,這種方式的優點是在文件修改過程中,同一份數據只有一份。不會過多的占用硬盤資源,但文件較大的情況下會占用內存資源,會使系統直接崩潰掉。具體操作如下:
with open(‘db.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f: 打開要修改的文件進行讀取。f.read data=f.read() with open(‘db.txt‘,mode=‘wt‘,encoding=‘utf-8‘) as f: 再把源文件打開進行寫入。f.write f.write(data.replace(‘kevin‘,‘SB‘)) replace 替換
第二種操作方式:則是一行一行的進行讀取然後修改,修改後的文件會暫時放入一個新文件裏,直到讀取修改完畢後刪除源文件,再以原文件名去命名新文件即可。這種操作方式不會過多的占用內存資源,但會有相同的兩份文件。所以我們得出結論,若文件較大我們就使用第二種方式,若文件較小就使用第一種。
import os (導入) with open(‘db.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as read_f, open(‘.db.txt.swap‘,mode=‘wt‘,encoding=‘utf-8‘) as wrife_f: 打開兩個文件一個負責讀一個負責寫 for line in read_f: wrife_f.write(line.replace(‘SB‘,‘kevin‘)) os.remove(‘db.txt‘) (刪除文件) os.rename(‘.db.txt.swap‘,‘db.txt‘) (以源文件名命名新文件)
函數
1.什麽是函數?函數的定義?
函數其實就是一個個小的功能,定義函數的方式就是實現要將這些小功能全部定義好,遇到需要用到的地方可以直接引用。
2.為什麽要用函數
因為如果要完成一個功能比較多的項目的話需要用到的代碼有可能會重復很多次,比如用戶登錄,若使用純代碼一行行的去寫則會使代碼冗余,並且可讀性與擴展性都會較差。而用函數先定義好一個個的小功能再去引用的話則會使整篇代碼減少很多。看起來更簡潔大方。
3.如何使用函數
使用函數的原則是一定要先定義,後引用。
定義函數的語法:
del+函數名(參數)(參數用來存放一個值):
(文檔註釋)
子
代
碼
塊
retrun(返回值,返回布爾值)
def login(): uname=input(‘請輸入用戶名>>: ‘).strip() pwd=input(‘password>>: ‘).strip() if uname == ‘egon‘ and pwd == ‘123‘: print(‘login successfull‘) return True else: print(‘user or password error‘) return False login() login() 後面的代碼若用到用戶登錄功能可直接login()引用。
Python第九天課程回顧