介紹一下會用到的一些內容
Python3打開、讀取和關閉文件的方法
1 file = open('D:\passwd.txt','r') #打開文件 2 content = file.readlines() #讀入全部文件內容,並存儲到變量推薦使用字典 3 file.close() #關閉打開的文件 4 print (content) #打印變量內容
#打開文件后一定要記得關閉文件,因為在量少的時候對程序的影響不大,但是在程序長時間運行和文件量很大的情況下會嚴重影響性能。確保所有數據都寫至磁盤。這稱為刷新輸出(flushing),這點非常重要。
往文件中寫入內容的方法:
注意:使用訪問模式w時,Python會打開指定的文件來完成寫。如果這個文件已經存在,則會清空他現有的內容,也就是完全清除,要追加一個文件,需要使用訪問模式a。要打開一個文件來完成讀和寫(不清除原有內容),需要使用w+。如果想打開一個文件完成寫,但是這個文件並不存在,那么首先會為你創建這個文件,然后在打開文件進行行寫。
r:以只讀方式打開文件,文件不存在則報錯
r+:以讀寫方式打開文件,文件不存在則報錯會覆蓋文件內容
a:以追加的方式打開文件,不會覆蓋原有內容。(附加寫入功能)
a+:以追加的方式打開文件,不會覆蓋原有內容(附加讀寫功能,但是我在操作過程沒看出有讀的效果,我在去實驗下)
w:文件不存在則新建,存在則將原有內容清空(附加只寫功能)
w+:文件不存在則新建,存在則將原有內容清空(附加讀寫功能)
w+與r+的區別
r+:可讀可寫,若文件不存在則報錯,會覆蓋原有內容
w+:可讀可寫,若文件不存在則創建,會覆蓋原有內容
r+與a+區別
r+:可讀可寫,會覆蓋原有內容,但不是覆蓋全部內容
a+:追加內容,不會覆蓋原有內容
總結:
如果文件不存在會報錯的有r和r+
打開文件只可寫不可讀的有a和w
會覆蓋現有文件的有r、w和w+
可讀可寫的有r+、w+、a+
方法一:
1 file1 = open('D:\socket.txt','w') #以寫入的模式打開文件 2 print ("Norwegian Blues stun easily",file = file1) #默認換行,把寫入的內容打印到file1(這是一個變量)中 3 file1.close() #關閉文件
li = ["1","2","3"] fiel = open('D:\socket.txt','a+') print (li,file = fiel)
方法二:
1 file1 = open('D:\socket.txt','a+') #以追加的模式打開文件 2 file1.write("bbbbbb\n") #寫入內容並換行 3 file1.close() #關閉文件
方法三:
1 file1 = open('D:\socket.txt','a+') #以追加的模式打開文件 2 file1.writelines("bbbbbb\n") #寫入內容並換行 3 file1.close() #關閉文件
解析write和writelines的區別:
write寫入的是一個字符串內容,不能寫入多個比如字典和列表用write寫入就會報錯
writelines的參數是序列,比如列表,它會迭代寫入文件
方法三:
fiel = open('D:\socket.txt','a+') #以追加的模式打開文件 fiel.write("1212") #寫入內容 fiel.close() #關閉文件
字典的使用
d = {} #創建字典 print (d) #打印字典 d["root"] = '/bin/bash' #給字典添加內容 d["httpd"] = '/sbin/nologin' print (d) #打印字典全部內容 print (d["root"]) #打印字典key對應的內容 name = "root" if name in d.keys(): #判斷是否在字典中 print (name+"在字典中") d["nfs"] = "/sbin/nologin" #字典內容的添加方法 print (d) del d["nfs"] #字典內容的刪除方法 print (d) d.pop("root") #字典的彈出和列表的pop用法一樣 print (d)
d = {} #創建字典 print (d) #打印字典 d["root"] = '/bin/bash' #給字典添加內容 d["httpd"] = '/sbin/nologin' print (d) #打印字典全部內容 print (d["root"]) #打印字典key對應的內容 name = "root" if name in d.keys(): #判斷是否在字典中 print (name+"在字典中") d["nfs"] = "/sbin/nologin" #字典內容的添加方法 d["ftp"] = "/sbin/nologin" print (d) test1 = d.popitem() #彈出末尾的內容 print (d) print (test1)
split()函數的使用
str = "1234,567\n90" print (str) str1 = str.split(',') #以逗號為分隔符,分割內容,分割后的內容存入列表 print (str1) #打印列表
str = "1234,567\n90" print (str) print ("==================") str1 = str.split(',')[0] #以逗號為分隔符,分割內容,只取出第一部分 print (str1) #打印列表
str = "1234,567\n90" print (str) print ("==================") str1 = str.split(',') #以逗號為分隔符,分割內容,只取出第一部分 print (str1) #打印列表 str2 = str.split('\n')[1] #以換行符為分隔符,取出第二部分 print (str2)
實驗要求:
輸入用戶名密碼
認證成功后顯示歡迎信息
輸錯三次后鎖定用戶
流程思路:
打開用戶和密碼文件並存入字典
打開鎖文件存入字典
提示用戶輸入用戶名和密碼
如果輸入錯誤再次提示輸入,重復三次,三次之后將該用戶鎖定,緊有保存的用戶名
#coding = utf-8 password = {} #創建字典 passwd = open('D:\passwd.txt','r') #以只讀的模式打開,確保文件存在否則報錯 for n in passwd.readlines(): #讀取文件的全部內容 k = n.split('\t')[0] #以tab為分割取出用戶名 #print(k) v = n.split('\t')[1] #以tab為分割取出密碼 #print (v) m = v.split('\n')[0] #以回車為分割符,取出密碼的完整內容 #print (m) password[k] = m #print (password) #如果要看執行效果,就把那幾個#去掉 passwd.close() lock = {} look = open('D:\socket.txt','r') for i in look.readlines(): k1 = i.split('\n')[0] lock[k1]=k1 print (k1) print (lock) count = 0 look.close() username = input("請輸入用戶名:") if username in lock.keys(): print ("該用戶已被鎖定:") else: pwd = input("請輸入密碼:") if pwd == password[username]: print ("登錄成功") else: while count < 2: pwd = input("請輸入密碼:") if pwd == password[username]: break count+=1 else: sok = open("D:\socket.txt",'a+') sok.write(username+'\n') sok.close() print ("登錄次數過多,用戶被鎖定")