標籤:leo 資料 == 登陸 開頭 div run bre 字元
一、檔案處理簡介
電腦系統分為:電腦硬體,作業系統,應用程式三部分。
我們用python或其他語言編寫的應用程式若想要把資料永久儲存下來,必須要儲存於硬碟中,這就涉及到應用程式要操作硬體,眾所周知,應用程式是無法直接操作硬體的,這就用到了作業系統。作業系統把複雜的硬體操作封裝成簡單的介面給使用者/應用程式使用,其中檔案就是作業系統提供給應用程式來操作硬碟虛擬概念,使用者或應用程式通過操作檔案,可以將自己的資料永久儲存下來。
有了檔案的概念,我們無需再去考慮操作硬碟的細節,只需要關注操作檔案的流程:
#1. 開啟檔案,得到檔案控制代碼並賦值給一個變數#2. 通過控制代碼對檔案進行操作#3. 關閉檔案
二、開啟檔案的方法
① f = open(‘檔案名稱‘ , ‘操作模式‘ , ‘編碼格式’) 如:
f = open(‘test.txt‘,‘r‘,encoding=‘utf-8‘)
注意:用這種方法開啟檔案,用完之後一定要調用f.close()方法將其關閉
②with open(‘檔案名稱‘ , ‘操作模式‘ , ‘編碼格式’) as f 如:
with open(‘day8.txt‘,‘w‘,encoding=‘utf-8‘) as f:
注意:用這種方法開啟檔案,處理完後會自動關閉檔案,但是處理的段落要進行縮排
三、操作檔案的幾種模式
四、處理檔案的幾種方法
樣本檔案如下:
△讀檔案:
read( )
讀取整個檔案
1 with open(‘love.txt‘,‘r‘,encoding=‘utf-8‘) as f:2 msg = f.read()3 print(msg)
read( int )
read()方法可以指定讀取的字元數,注意,是字元數,不是位元組數,如下:
1 with open(‘love.txt‘,‘r‘,encoding=‘utf-8‘) as f:2 msg = f.read()3 print(msg)
#結果為‘一生所’
readline( )
可以讀取一行,如下:
1 with open(‘love.txt‘,‘r‘,encoding=‘utf-8‘) as f:2 msg = f.readline()3 print(msg)
#結果是 ‘一生所愛’
readlines( )
可以讀取整篇文章,並且將每一行都作為一個元素添加到一個列表中,如下:
with open(‘love.txt‘,‘r‘,encoding=‘utf-8‘) as f: msg = f.readlines() print(msg)#結果是:[‘一生所愛\n‘, ‘演唱:盧冠庭\n‘, ‘從前現在過去了再不來\n‘, ‘紅紅落葉長埋塵土內\n‘, ‘開始終結總是沒變改\n‘, ‘天邊的你飄泊白雲外\n‘, ‘苦海翻起愛恨\n‘, ‘在世間難逃避命運\n‘, ‘相親竟不可接近\n‘, ‘或我應該相信是緣份‘]
for lin in f :
可以用迴圈的方法直接讀取每一行。f 是一個可迭代對象
1 with open(‘love.txt‘,‘r‘,encoding=‘utf-8‘) as f: 2 for line in f: 3 print(line,end=‘‘) 4 #結果是: 5 # 一生所愛 6 # 演唱:盧冠庭 7 # 從前現在過去了再不來 8 # 紅紅落葉長埋塵土內 9 # 開始終結總是沒變改10 # 天邊的你飄泊白雲外11 # 苦海翻起愛恨12 # 在世間難逃避命運13 # 相親竟不可接近14 # 或我應該相信是緣份
△寫檔案:
write( str )
可以指定寫入模式,如果檔案不存在,重新建立一個,如果已經存在,w模式下會將之前的文字覆蓋,重新寫入,a模式是在結尾處追加。
1 with open(‘love.txt‘,‘w‘,encoding=‘utf-8‘) as f:2 f.write(‘這段話會覆蓋之前的文章‘)
3 with open(‘love.txt‘,‘a‘,encoding=‘utf-8‘) as f:
4 f.write(‘這段話不會覆蓋之前的文章‘)
△游標的移動
seek( )
文法為:fileObject.seek(offset, whence)
1 with open(‘love.txt‘,‘r‘,encoding=‘utf-8‘) as f:2 print(f.read(3)) #讀取3個字元 : 一生所3 f.seek(3) #游標從起點向後移3個位元組(1個中文)4 print(f.read(3)) #再從前面的基礎上開始讀:生所愛
tell( )
可以擷取當前游標位置,返回的是位元組數
△截取檔案
truncate()
此方法是截取檔案,注意,是直接對原檔案進行截取。參數是填一個位元組數,如下:
1 with open(‘love.txt‘,‘r+‘,encoding=‘utf-8‘) as f:2 f.truncate(9) #截取9個位元組,就是3個中文3 print(f.read()) #再讀取的內容結果為:一生所 3個字
五:課後練習(註冊,登入小系統)
1 #使用者註冊,將使用者名稱以及密碼存在檔案裡,然後驗證登入資訊,給3次機會 2 print(‘*************註冊資訊*************‘) 3 while 1: 4 username = input(‘請輸入您的使用者名稱:‘).strip() 5 password = ‘‘ 6 password1 = input(‘請輸入您的註冊密碼:‘).strip() 7 password2 = input(‘請再次輸入您的註冊密碼:‘).strip() 8 if password1 == password2: 9 print(‘恭喜您,註冊成功!‘)10 password = password111 break12 else:13 print(‘您兩次輸入的密碼不同,請重新輸入!‘)14 with open(‘day8.txt‘,‘w‘,encoding=‘utf-8‘) as f1:15 16 # f1.write(‘{%s:%s}‘%(username,password))17 f1.write(‘%s:%s‘%(username,password))18 19 print(‘*************登入資訊*************‘)20 21 count = 322 with open(‘day8.txt‘,‘r‘,encoding=‘utf-8‘) as f2:23 user_list = f2.read().split(‘:‘)24 25 # print(user_list)26 while count > 0 :27 username = input(‘請輸入您的使用者名稱:‘).strip()28 password = input(‘請輸入您的密碼:‘).strip()29 if username == user_list[0] and password == user_list[1]:30 print(‘恭喜您,登陸成功!‘)31 break32 else:33 count -= 134 print(‘登入失敗,請重新輸入!您還有%s次機會‘%count)
Python筆記·第七章—— IO(檔案)處理