跟牛牛老师学python自动化的第四天
生活随笔
收集整理的這篇文章主要介紹了
跟牛牛老师学python自动化的第四天
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉眼學完四天了,來看看這次學了點啥:
NO1? 很重要的函數(shù)
#函數(shù)就是一個功能,一個方法,簡化代碼#函數(shù)必須得調用才會執(zhí)行
#在函數(shù)里面的變量全都是局部變量,它只能在函數(shù)里面用,函數(shù)執(zhí)行結束那么沒有這個變量
#不帶參數(shù) def say(): #函數(shù)名print('哈哈哈') #函數(shù)體say() #函數(shù)調用 #帶一個參數(shù)
1 def say(name): #形參 2 print('%s說:哈哈哈哈!'%name) 3 4 say('周繼蓉') #實參 #帶多個參數(shù)
def say(name,sex)print('%s 哈哈 性別%s '%(name,sex))x='zhoujirong' say(x,‘女’) #默認值參數(shù)
1 def say(name,sex='男'): 2 # 必填參數(shù),未知 #默認值參數(shù),非必填 3 print('%s 哈哈哈 性別%s'%(name,sex)) 4 x='zjr' 5 say(x) 6 say(x,'女') 7 8 #結果: 9 # zjr 哈哈哈 性別男 10 # zjr 哈哈哈 性別女 #返回值
#如果需要用到函數(shù)的處理結果的話需要寫return,不需要就不需要寫
#函數(shù)里面如果碰到return,函數(shù)立即結束 1 def calc(a,b): 2 res = a*b 3 return res 4 cur_money = 8000 5 nx=calc(1000,13) 6 print(nx+cur_money) 1 def my(): 2 for i in range(100): 3 print(i) 4 if i==2: 5 return 6 print(my()) 7 #結果 8 #0 9 #1 10 #2 11 #none 1 #1.寫一個校驗輸入的字符串是否是小數(shù)的程序 2 # 0.12 -0.13 3 #1.只有一個小數(shù)點,count 4 #2.正小數(shù)的情況,小數(shù)點左邊和右邊都是整數(shù)的話,才合法 0.12 [0,12] 5 #3.負小數(shù)的情況下,小數(shù)點右邊是整數(shù),左邊必須以負號開頭,只有一個負號 6 # -5.4 7 #[-5,4] 8 #[1:] 從第二位開始到最后都是整數(shù) 9 10 def check_float(s): 11 s = str(s)#轉成字符串 12 if s.count('.')==1: 13 s_list=s.split('.') 14 left=s_list[0]#小數(shù)點左邊 15 right=s_list[1]#小數(shù)點右邊 16 if left.isdigit() and right.isdigit(): 17 return True 18 if left.startswith('-') and left.count('-')==1: 19 if left[1:].isdigit() and right.isdigit(): 20 return True 21 22 return False 23 24 print(check_float(-5.2)) 25 print(check_float(-.6)) 26 print(check_float('--.6')) 27 print(check_float('-dd.6'))
1 def my_file(name,content=None): 2 with open(name,'a+') as f: 3 f.seek(0) 4 if content: 5 f.write(content) 6 else: 7 return f.read()
NO2 json模塊使用
1 # json是一個字符串,只不過是長得像字典 2 # json只能用雙引號3 import json 4 5 user_info = ''' 6 7 {"nhy":"123456","zjr":"111111"} 8 9 ''' 10 user_dic=json.loads(user_info)#把json(字符串)裝換成字典 11 print(user_dic) 12 print('user_dic',type(user_dic)) 13 print('user_info',type(user_info))
#結果:
#{‘nhy’:'123456','zjr':'111111'}
#user_dic<class'dict'>
#user_info<class'str'>
將字典轉換成json串
1 stu_info = {'laowang':{'cars':['bmw','Ben-z']}} 2 stu_str = json.dumps(stu_info)#把字典轉成json(字符串) 3 print('json',type(stu_str)) 4 print(stu_str)結果:
#dump 將字典直接成json寫進文件1 stu_info = {'laowang':{'cars':['bmw','Ben-z']}} 2 fw=open('users.json','w',encoding='utf-8') 3 json.dump(stu_info,fw,indent=4)#不需要咱們自己再write,人家會自動寫入文件,indent加縮進,4 就夠用 4 5 # load 和loads 不帶s直接讀文件,帶s讀字符串,同dumps和dump
結果:
1 f=open('users.json') 2 res=json.load(f) #將json文件讀成字典 3 print(res)結果:
用json寫注冊程序:
1 import json 2 f = open('users','a+',encoding='utf-8') #文件句柄,文件對象 3 f.seek(0) 4 all_users = json.load(f) #把json(字符串)轉換成字典 5 for i in range(3): 6 u = input('user:').strip() 7 p = input('p:').strip() 8 cp = input('cp:').strip() 9 if not u or not p: 10 print('賬號、密碼不能為空') 11 elif u in all_users: 12 print('該用戶已經被注冊!') 13 elif u not in all_users and cp==p: 14 all_users[u]=p 15 break 16 f.seek(0) 17 f.truncate()#清空原來的內容 18 json.dump(all_users,f,indent=4) #字典轉json 19 f.close()?NO3? 高效讀取文件
速度順序: CPU>內存>磁盤
存用戶名、密碼進文件,寫登錄和注冊
1 all_users = {} 2 f = open('users.txt','a+',encoding='utf-8') #文件句柄,文件對象 3 f.seek(0) 4 for line in f: #直接循環(huán)文件對象,每次循環(huán)的時候就是取的每一行數(shù)據 5 line = line.strip() 6 line_list = line.split(',') # [nhy,123456] 7 username = line_list[0] 8 passwd = line_list[1] 9 all_users[username] = passwd 10 u = input('user:').strip() 11 p = input('p:').strip() 12 cp = input('cp:').strip() 13 for i in range(3): 14 if not u or not p: 15 print('賬號、密碼不能為空') 16 elif u not in all_users: 17 print('用戶不存在!') 18 elif p!=all_users.get(u): 19 print('密碼錯誤!') 20 else: 21 print('登錄成功') 22 break 23 24 for i in range(3): 25 if not u or not p: 26 print('賬號、密碼不能為空') 27 elif u in all_users: 28 print('該用戶已經被注冊!') 29 elif u not in all_users and cp==p: 30 info = '%s,%s\n'%(u,p) 31 f.write(info) 32 break 33 f.close()緩存區(qū):內存和磁盤中間存數(shù)據的地方,緩存區(qū)存滿會寫入磁盤
fw = open('zjr','w') fw.write('dddd','w') fw.flush()#把緩沖區(qū)里面的數(shù)據立即寫到磁盤上 fw.close()with寫打開文件,會自己關閉文件
1 with open('zjr','w') as fw,open('tzy','w') as fw2: #打開多個文件,用逗號隔開 2 fw.read() 3 fw.write()NO4 文件修改
方法一:
1 #文件修改 2 方法1#1.簡單粗暴直接 文件小可以,文件大會崩潰 3 1.先獲取到文件里的所有內容 4 2.然后修改內容 5 3.清空原來文件里面的內容 6 4.重新寫入 7 8 f = open('test','a+') 9 f.seek(0) 10 all_data=f.read() 11 new_data=all_data.replace('123','python') 12 f.seek(0) 13 f.truncate()#清空文件內容 14 f.write(new_data) 15 f.flush() 16 f.close()方法二:
1 #方法2 高效的處理文件方式 2 # words words_new 3 #1.先打開原來的文件,再打開一個空文件 4 #2.循環(huán)處理原來文件里面的每一行數(shù)據,處理完之后,寫到新文件里面 5 #3.把原來的文件刪掉,把新的文件的名字改為原來文件的名字 6 import os #引入os模塊刪除 7 with open('words',encoding='utf-8') as fr,open('.words','w',encoding='utf-8') as fw: 8 for line in fr: 9 line=line.lstrip()#去左邊空格 10 if line:#判斷這一行是否有數(shù)據 非空即真,真就處理,假就不處理,繼續(xù)循環(huán) 11 line = line.replace('你','you')#替換數(shù)據 12 fw.write(line)#寫到新文件里面 13 os.remove('words')#刪除原來文件 14 os.rename('.words','words')#把新文件的名字改成原來文件的名字練習修改文件
#郵箱1 import os #引入os模塊刪除 2 import string 3 with open('eamil.txt',encoding='utf-8') as fr,open('.words','w',encoding='utf-8') as fw: 4 for line in fr: 5 if not line[0] in string.digits: 6 line=line.rstrip() 7 line = line+'@163.com\n'#替換數(shù)據 8 fw.write(line)#寫到新文件里面 9 os.remove('eamil.txt')#刪除原來文件 10 os.rename('.words','eamil.txt')#把新文件的名字改成原來文件的名字
監(jiān)控日志
1 #1.監(jiān)控日志 2 # 1.如果一分鐘之內某個ip訪問超過100次 3 # 2.就把ip找出來 4 5 6 #集合 天生去重 7 #1.打開日志文件 8 #2.獲取每行數(shù)據 9 #3.split,取第一個元素 10 #4.找出所有ip,統(tǒng)計次數(shù) 11 #5. 判斷每個ip次數(shù)大于100,就發(fā)郵件 12 #6. 記錄文件指針,給下一次讀的時候用 13 #7. 等待60a,重新讀取文件 14 15 import time 16 point = 0 #存放的是文件初始的位置 17 while True: 18 with open('access.log',encoding='utf-8') as f: 19 f.seek(point) 20 ip_info={}#定義字典存放ip和它出現(xiàn)的次數(shù) 21 for line in f: 22 ip=line.split()[0]#列表按空格切分,第一個就是ip 23 if ip in ip_info: 24 ip_info[ip]+=1 25 else: 26 ip_info[ip]=1 27 point = f.tell()#獲取當前文件指針的位置 28 for k in ip_info: 29 if ip_info.get(k)>=100: 30 print('該ip正在攻擊你:%s'%k) 31 time.sleep(60)#等待60s再統(tǒng)計NO5 集合
1.天生去重,循環(huán)2.關系測試 - 交集、差集、并集、反向差集、對稱差集
集合:天生去重
1 nums = [1,1,1,2,3,4,4] 2 nums_set = set(nums) 3 nums2 = {1,2,3,4,1,1,1} 4 print(nums2) 5 6 null_set=set()#空集合定義 1 #轉集合 2 list = [1,2,3,4,5,6] 3 list_2 = [2,5,4,7] 4 list=set(list) 5 list_2=set(list_2) 6 print(list.intersection(list_2))#交集 取出重復數(shù)據 7 print(list.union(list_2))#并集 去重 統(tǒng)一展示 8 print(list.difference(list_2))#差集 list中有,list_2沒有 9 10 list_3 = set([1,3,6]) 11 print(list_3.issubset(list))#子集 12 print(list.issuperset(list_3))#父集 13 print(list.symmetric_difference(list_2))#對稱差集,并集-交集 14 15 # & 交集 |并集 - 差集 ^對稱差集 16 print(list & list_2) 17 print(list | list_2) 18 print(list - list_2) 19 print(list ^ list_2) 20 21 #集合操作 22 #添加 23 list.add(555)#一次只能添加一個 24 list.update(666,777)#同時添加多個 25 #刪除 26 # list.remove(5)#指定刪除,刪除一個不存在的會報錯 27 list.pop()#隨機刪除 28 list.discard(666)#刪除一個不存在的不會報錯集合練習-密碼
1 pwd = input('請輸入你的密碼:').strip() 2 pwd = set(pwd) 3 #大寫字母、小寫字母、數(shù)字、特殊字符 4 import string 5 nums=set(string.digits) 6 ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz' 7 lower=set(ascii_lowercase) 8 ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 9 upper =set(ascii_uppercase) 10 punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~""" 11 zifu=set(punctuation) 12 if pwd & nums & lower & upper & zifu: 13 print('合法!') 14 else: 15 print('大寫字母、小寫字母、數(shù)字、特殊字符都要有!')?
轉載于:https://www.cnblogs.com/Mezhou/p/9206179.html
總結
以上是生活随笔為你收集整理的跟牛牛老师学python自动化的第四天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软件需求工程与建模 - 小组项目】阶段
- 下一篇: 图解HTTP学习笔记