1. 程式人生 > >Python筆記·第七章—— IO(文件)處理

Python筆記·第七章—— IO(文件)處理

進行 相親 file 字符數 當前 中文 登錄 cat 保存

一、文件處理簡介

計算機系統分為:計算機硬件,操作系統,應用程序三部分。

我們用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 = password1
11         break
12     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 = 3
22 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             break
32         else:
33             count -= 1
34             print(登錄失敗,請重新輸入!您還有%s次機會%count)

Python筆記·第七章—— IO(文件)處理