成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Python基礎(chǔ)-文件讀寫(xiě)、JSON

Charles / 1096人閱讀

摘要:用戶(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

相關(guān)文章

  • python大佬養(yǎng)成計(jì)劃----讀寫(xiě)json數(shù)據(jù)

    摘要:是一種輕量級(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ì)象編碼...

    CodeSheep 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---31、數(shù)據(jù)存儲(chǔ):文件存儲(chǔ)

    摘要:如果該文件已存在,文件指針將會(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ǔ)了,保存的形式可以...

    dreamans 評(píng)論0 收藏0
  • Python的高級(jí)特性,模塊和IO操作

    摘要:所以如果像上述這樣引入模塊的時(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á)成我們的目的。 模...

    WelliJhon 評(píng)論0 收藏0
  • python基礎(chǔ)教程:序列化

    摘要:默認(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ù)先...

    gityuan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<