Python筆記·第七章—— IO(檔案)處理

來源:互聯網
上載者:User

標籤: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)
  • offset -- 開始的位移量,也就是代表需要移動位移的位元組數,注意,是位元組數,負數表示像前移動

  • whence:可選,預設值為 0。給offset參數一個定義,表示要從哪個位置開始位移;0代表從檔案開頭開始算起,1代表從當前位置開始算起,2代表從檔案末尾算起。

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(檔案)處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.