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