摘要:用戶(hù)注冊(cè)注冊(cè)用戶(hù)和密碼存在文件里面讀寫(xiě)文件要從文件里面取出來(lái)所有的用戶(hù)名如果不存在就寫(xiě)入,存在就報(bào)用戶(hù)名已注冊(cè)存放所有的用戶(hù)名用戶(hù)名長(zhǎng)度不合法密碼長(zhǎng)度不合法兩次輸入的密碼不一致用戶(hù)名已經(jīng)注冊(cè)注冊(cè)成功用戶(hù)登陸用戶(hù)從中讀取帳戶(hù)和密碼進(jìn)行登陸登陸
username,12345678 username2,abc12345
用戶(hù)注冊(cè)
#1.注冊(cè): #用戶(hù)和密碼存在文件里面 #username,123456 #username2,abc123 #讀寫(xiě)文件 #1.要從文件里面取出來(lái)所有的用戶(hù)名 #2.如果不存在就寫(xiě)入,存在就報(bào)用戶(hù)名已注冊(cè) f = open("users.txt","a+") #f.seek(0) res = f.read() all_user_name = [] #存放所有的用戶(hù)名 for r in res.split(" "): #["username,123456","username2,abc123"] #"username,123456" username = r.split(",")[0] all_user_name.append(username) for i in range(3): username = input("username:").strip() pwd = input("pwd:").strip() cpwd = input("cpwd:").strip() if not(len(username) > 6 and len(username) < 20): print("用戶(hù)名長(zhǎng)度不合法") elif not (len(pwd) >=8 and len(pwd) <= 20): print("密碼長(zhǎng)度不合法") elif pwd != cpwd: print("兩次輸入的密碼不一致") elif username in all_user_name: print("用戶(hù)名已經(jīng)注冊(cè)") else: user_info = "%s,%s "%(username,pwd) f.write(user_info) print("注冊(cè)成功") break f.close()
用戶(hù)登陸
# 用戶(hù)從user.txt 中讀取帳戶(hù)和密碼進(jìn)行登陸 # res = open("users.txt").read() # username = input("username:") # pwd = input("pwd:") # user_info = username+","+pwd # if user_info in res: # print("登陸成功") # else: # print("登陸失敗,帳號(hào)或密碼錯(cuò)誤") # all_user = {} res = open("users.txt").read() for r in res.split(" "): #["username,12345678","username2,abc12345"] #"username,12345678" ["username,12345678"] if r.strip() != "": username = r.split(",")[0] pwd = r.split(",")[1] all_user[username] = pwd for i in range(3): username = input("username:") pwd = input("pwd:") if username in all_user: #if pwd == all_user.get(username): if pwd == all_user[username]: print("歡迎登錄!") else: print("帳號(hào)/密碼錯(cuò)誤!") else: print("該用戶(hù)未注冊(cè)")文件讀寫(xiě)
r:只讀,文件不存在,會(huì)報(bào)錯(cuò)
w: 只寫(xiě),會(huì)清空原有內(nèi)容,文件不存在會(huì)新建
a: 追加寫(xiě),不會(huì)清空,文件不存在會(huì)新建
r+: 讀寫(xiě)模式,文件不存在會(huì)報(bào)錯(cuò)
w+: 寫(xiě)讀模式,文件不存在會(huì)創(chuàng)建,文件會(huì)被刪除后重寫(xiě)
a+: 追加讀模式,文件不存在會(huì)創(chuàng)建,文件只會(huì)被追加
rb、wb、ab: 以二進(jìn)制方式,多用于圖像,多媒體數(shù)據(jù)等
文件讀
f = open("users.txt") print(f.read()) #獲取到文件里面所有的內(nèi)容 print(f.read()) #再次讀時(shí)會(huì)讀不到內(nèi)容 print(f.readlines()) #文件中所有內(nèi)容,返回為list,文件中每行分別為一個(gè)元素 print(f.readline()) #一次讀取一行內(nèi)容
文件寫(xiě)
f1 = open("users.txt","a") a=["username1,123456 ","usrname2,123456 "] for i in a: f1.write(i) #每次寫(xiě)入一行 f1.writelines(a) #writelines()方法用于將list寫(xiě)入文件
文件訪(fǎng)問(wèn)次數(shù)記錄練習(xí)
# 1.要從日志中訪(fǎng)問(wèn)超過(guò)200次的 # 2.每分鐘都運(yùn)行一次 #思路: # 1.讀取文件內(nèi)容,獲取IP地址 # 2.把每個(gè)IP地址存起來(lái) #["192.168.1.1","192.168.1.2","192.168.1.3"] # 3.以字典方式存{"192.168.1.1":2,"192.168.1.3":5} #判斷ip訪(fǎng)問(wèn)次數(shù)超過(guò)200次,如果字典的value超過(guò)200,加入黑名單 import time point = 0 #初始的位置 while True: ips = {} f = open("access.log",encoding="utf-8") f.seek(point) for line in f: #循環(huán)讀取文件里面每行數(shù)據(jù) ip = line.split(" ")[0] #按照空格分隔,取第一個(gè)元素ip if ip in ips: #判斷這個(gè)IP是否存在 ips[ip] += 1 #如存在,次數(shù)+1 else: ips[ip] = 1 #不存在,IP次數(shù)為1 point = f.tell() #記錄文件指針位置 f.close() for ip,count in ips.items(): #循環(huán)這個(gè)字典,判斷次數(shù)大于200的 if count >= 200: print("%s 加入黑名單"%(ip)) time.sleep(60)
高效處理文件
f = open("access.log",encoding="utf-8") #f叫文件對(duì)象或文件句柄 #第一種用while循環(huán) while True: line = f.readline() #一次只取一行 if line != "": print(line) else: print("文件內(nèi)容讀完,結(jié)束") break #第二種直接遍歷文件 for line in f: print(line)
修改文件內(nèi)容
#簡(jiǎn)單直接的方式 f = open(r"D:file.txt",encoding="utf-8") res = f.read().replace("一點(diǎn)","二點(diǎn)") f.close() f = open(r"D:file.txt","w",encoding="utf-8") f.write(res) f.close()
#方式二 f1 = open("file.txt","w+",encoding="utf-8") f1.seek(0) res = f1.read().replace("一點(diǎn)","hello") f1.seek(0) f1.truncate() #清空文件里的內(nèi)容 f1.write(res) f1.close()
import os f2 = open("file.txt",encoding="utf-8") f3 = open("file.txt.bak","w",encoding="utf-8") for line in f2: new_line = line.replace("NI","NIIIIIIII") f3.write(new_line) f2.close() f3.close() os.remove("file.txt") os.rename("file.txt.bak","file.txt")
import os with open("file.txt",encoding="utf-8") as f1, open("file.txt.bak","w",encoding="utf-8") as f2: #使用with時(shí),文件不用就會(huì)被自動(dòng)關(guān)閉,可同時(shí)打開(kāi)多個(gè)文件 for line in f1: new_line = line.replace("二點(diǎn)","一點(diǎn)") f2.write(new_line) os.remove("file.txt") os.replace("file.txt.bak","file.txt")JSON處理
JSON是一種通用的數(shù)據(jù)類(lèi)型,所有的語(yǔ)言都認(rèn)識(shí)
JSON是字符串
方法如下:
loads() 字符串轉(zhuǎn)為字典
dumps() 字典轉(zhuǎn)為字符串
load() 直接傳入一個(gè)含有字符串的文件對(duì)象,將字符串轉(zhuǎn)為字典
dump() 傳入字典和文件對(duì)象,將字典轉(zhuǎn)為字符串
如果涉及到文件,使用load()和dump()更方便
字符串轉(zhuǎn)成字典 s = """ { "error_code": 0, "stu_info": [ { "id": 8410, "name": "小黑1", "sex": "男", "age": 28, "addr": "河南省濟(jì)源市北海大道32號(hào)", "grade": "天蝎座", "phone": "13488709889", "gold": 10401 }, { "id": 11089, "name": "小黑1", "sex": "男", "age": 28, "addr": "河南省濟(jì)源市北海大道32號(hào)", "grade": "天蝎座", "phone": "18612511124", "gold": 100 } ] } """ import json res = json.loads(s) #json串(字符串),轉(zhuǎn)成字典 print(res) print(res.keys) print(type(res))
字典轉(zhuǎn)為字符串 stus = {"xiaojun":"123456","xiaohei":"7891","xiaoliu":"111111","海龍":"111"} res2 = json.dumps(stus, indent=4,ensure_ascii=False) #indent為縮進(jìn),中文默認(rèn)使用的ascii編碼,中文需要ensure_ascii=False print(res2) print(type(res2)) with open("stus.json","w",encoding="utf-8") as f: f.write(res2)
可以通過(guò)讀取文件中內(nèi)容,將字符串轉(zhuǎn)為字典 f = open("stus.json",encoding="utf-8") content = f.read() user_dict = json.loads(content) print(user_dict)
可能直接通用load(),傳入文件對(duì)象將字符串轉(zhuǎn)為字典 f = open("stus.json", encoding="utf-8") user_dict = json.load(f) #load()可以直接傳入一個(gè)文件對(duì)象 print(user_dict)
使用dump()傳入字典和文件對(duì)象將字典轉(zhuǎn)為字符串 stus = {"xiaojun":"123456","xiaohei":"7891","xiaoliu":"111111","海龍":"111"} f = open("stus2.json","w",encoding="utf-8") json.dump(stus, f, indent=4, ensure_ascii=False)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43655.html
摘要:是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫(xiě)。使用函數(shù)需要導(dǎo)入模塊將對(duì)象編碼成字符串用于解碼數(shù)據(jù)。該函數(shù)返回字段的數(shù)據(jù)類(lèi)型。 json 使用 Python 語(yǔ)言來(lái)編碼和解碼 JSON 對(duì)象。JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫(xiě)。使用json函數(shù)需要導(dǎo)入json模塊 json.dumps 將 Python 對(duì)象編碼...
摘要:如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。運(yùn)行結(jié)果以上是讀取文件的方法。為了輸出中文,我們還需要指定一個(gè)參數(shù)為,另外規(guī)定文件輸出的編碼。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---30、解析庫(kù)的使用:PyQuery下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---32、數(shù)據(jù)存儲(chǔ):關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ):MySQL 我們用解析器解析出數(shù)據(jù)之后,接下來(lái)的一步就是對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)了,保存的形式可以...
摘要:所以如果像上述這樣引入模塊的時(shí)候,調(diào)用函數(shù)必須加上模塊名通常情況下鼓勵(lì)每個(gè)語(yǔ)句只導(dǎo)入一個(gè)包方便理解和閱讀代碼。 今天我們學(xué)習(xí)Python的高級(jí)特性、模塊和IO操作,通過(guò)學(xué)習(xí)這些,我們可以更快的了解Python,使用Python。 高級(jí)特性中會(huì)講述列表生成式、生成器、和一些高級(jí)函數(shù),學(xué)習(xí)這些方便我們快速的生成列表,節(jié)省我們使用Python的時(shí)間,更快的使用Python達(dá)成我們的目的。 模...
摘要:默認(rèn)情況下,它也是不安全的,如果數(shù)據(jù)是由黑客精心設(shè)計(jì)的,則反序列化的數(shù)據(jù)可能被植入惡意代碼??偨Y(jié)為我們提供了數(shù)據(jù)序列化的工具。如果是自己內(nèi)部使用,可以作為一個(gè)選擇進(jìn)行復(fù)雜對(duì)象的序列化。 上一節(jié)我們學(xué)習(xí)了文件的讀寫(xiě),把一個(gè)字符串(或字節(jié)對(duì)象)保存到磁盤(pán)是一件很容易的事情。但是在實(shí)際編程中,我們經(jīng)常需要保存結(jié)構(gòu)化數(shù)據(jù),比如復(fù)雜的字典、嵌套的列表等等,這時(shí)候就需要我們想辦法把這些結(jié)構(gòu)化數(shù)據(jù)先...
閱讀 2810·2023-04-25 23:08
閱讀 1601·2021-11-23 09:51
閱讀 1584·2021-10-27 14:18
閱讀 3127·2019-08-29 13:25
閱讀 2840·2019-08-29 13:14
閱讀 2918·2019-08-26 18:36
閱讀 2202·2019-08-26 12:11
閱讀 824·2019-08-26 11:29