1、元组
1 #元组,不可变的list 2 #需要一个不可以被改变的list,就使用元组 3 t = ()#空的元组 4 t = ('127.0.0.1',3306,'root','123456')#元组 5 print(t[1])#元组取值,与list一样 6 # t[1] = 3308 元组不能修改,修改会报错 7 print(t.count(3306))#计算元素的个数 8 print(t.index(3306))#获取元素的位置
2、两种文件打开方式
1 #使用open打开文件,需要使用后关闭文件 2 f = open('user3.txt', 'a+', encoding= 'utf-8') 3 print(f.read()) 4 f.close() 5 6 # 使用with打开文件,文件会自动关闭,可以一次打开多个文件 7 with open('user3.txt','a+',encoding='utf-8') as f,open('a.txt','w') as f2: 8 f.seek(0) 9 print(f.read())
3、文件读写
1 li = ['abc', 'xiaozi', 'xiaobai', 'xiaohei', 'xiaoming', 'xiaolan'] 2 3 #读文件 4 f = open('names.txt','r',encoding='utf-8')#打开一个文件,可以写绝对路径 5 res = f.read()#使用read方法读取文件全部内容 6 print(res) 7 res2 = f.read()#第二次再读取时光标位置指向末尾,所以读不到数据 8 print('res2...',res2) 9 f.close()#文件操作完毕需要关闭文件 10 11 #写文件 12 f = open('names.txt','w',encoding='utf-8') 13 f.write(','.join(li))#只能是写字符串 14 f.write(str(li)) 15 f.write('abc,123\n')#\n是换行符 16 f.write('bcd,123\n') 17 f.write('bcd3,123\n') 18 f.close() 19 20 #其它方法 21 f.readline()#读取一行 22 f.readlines()#一行一行读取,存成一个list 23 f.seek(0)#设置文件指针到开头 24 f.tell()#返回文件指针的位置 25 f.flush()#把缓冲区的内容写进文件 26 l = ['123','456','789'] 27 f.writelines(l) #传一个list,把list中的元素一个一个写进文件 28 29 #循环文件,会一行一行的读取 30 with open('a.txt',encoding='utf-8') as f : 31 for line in f: 32 print('每次内容:',line)
4、文件打开模式
f = open('a.txt','r',encoding='utf-8') #文件打开模式 #r 只读,文件指针在开头,默认的模式,文件不存在报错 #w 只写,打开后清空原来的文件内容,文件不存在自动创建 #a 追加模式,只能写不能读,文件指针指向末尾,追加在内容后面,文件不存在会创建 #r+ 读写模式,可以读可以写,文件指针指向文件开头,写会覆盖原内容,文件不存在报错 #w+ 写读模式,可写可读,打开后清空原来文件内容,文件不存在自动创建 #a+ 追加读模式,文件指针放在文件末尾,追加内容在后面,使用seek改变指针位置写文件时不生效,只能追加在末尾,读文件时可以使用seek改变位置,文件不存在时自动创建 #只要是r文件不存在都会报错,只要是w打开文件都会清空内容,a模式是在末尾追加内容
5、文件处理实例--修改文件
1 #1、简单直接粗暴的 2 #1、先读取到所有的内容,修改 3 #2、然后清空原有文件的内容,再写入新的 4 5 f = open('account.txt','a+') 6 f.seek(0) 7 l = [] 8 for line in f: 9 line = line.strip() 10 line_list = line.split(',') 11 sum = int(line_list[1])+int(line_list[2])+int(line_list[3]) 12 avg = sum//3 13 new_line = '%s,%s\n'%(line,avg) 14 l.append(new_line)#把所有的数据都存进list里 15 f.seek(0) 16 f.truncate() 17 f.writelines(l)#把list写进文件 18 19 #2、高效的方式 20 #打开2个文件 a b,a只负责读,b只负责写,一次只处理一条数据,比较高效 21 import os 22 with open('account.txt') as f,open('account2','w') as fw: 23 for line in f: 24 line = line.strip() 25 line_list = line.split(',') 26 sum = int(line_list[1])+int(line_list[2])+int(line_list[3]) 27 avg = sum//3 28 new_line = '%s,%s\n'%(line,avg) 29 fw.write(new_line) 30 fw.flush() #立即写入文件 31 os.remove('account.txt') 32 os.rename('account2','account.txt')
6、实例--监控ip地址
# 找到每分钟访问超过20次的ip地址 #1、打开文件 #2、依次读取文件里面的每行 #3、取到每行里面的ip地址 split #4、存到字典里面,ip做key,次数做value #5、循环字典,如果value大于20,那么就输出出来 # {'ip1':1,'ip2':1,'ip3':1 } # 192.168.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /wp-includes/logo_img.php HTTP/1.0" 302 161 "http://wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 # 192.168.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /blog HTTP/1.0" 301 233 "http://wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) import time point = 0#用来记录文件指针的位置 while True: with open('access.log',encoding='utf-8') as f: f.seek(point)#每一次运行时把文件指针指向新的日志 ips = {} for line in f: ip = line.split()[0] #取到ip地址 if ip not in ips: #判断ip是否出现过,没有出现过ip的次数就是1 ips[ip] = 1 else:#出现过的话,次数就在原来的基础上+1 ips[ip]+=1 point = f.tell()#记录读完的位置 for k,v in ips.items(): if v>=20: print('有问题的ip地址是%s'%k) time.sleep(60)#每分钟运行一次
7、切片
1 L = ['xiaomi',100,88,94] 2 sum(L[1:])#内置函数,计算列表元素的和 3 s = 'abc1234567' 4 #切片顾头不顾尾 5 print(s[0:3]) 6 print(s[:3])#前面数字不写代表从头开始取 7 print(s[1:])#后面数字不写代表取到末尾 8 print(L[:])#前后数字都不写,取全部的元素 9 L[1:2] = [] #删除切片 10 del L[1:3]#删除切片 11 L[1:4] = [4,5,6] #修改切片 12 13 nums = list(range(1,21))#取1到20的数组 14 print(nums[0:10:2])#第三个数字代表步长,隔2个数字取一个 15 print(nums[::-2])#步长为负数,取数时从右往左取
8、集合
1 #集合可以去掉重复元素,集合是无序的 2 3 L = [1,1,2,3,4,4,5] 4 res = set(L)#把L转成一个集合 5 print(res) 6 7 res = list(res)#把集合转成list 8 print("res: ",res) 9 10 #交集,a、b里面都有的 11 s1 = {1,2,3,4} 12 s2 = {4,5,6,7} 13 print(s1.intersection(s2))#取交集 14 print(s1&s2)#取交集 15 stu1 = ['xxx','ccc','fff'] 16 stu2 = ['xxx','ccc','rrr','iii'] 17 print(set(stu1) & set(stu2))#转成集合,然后取交集 18 19 #并集,合并a,b 20 print(s1.union(s2)) 21 print(s1 | s2) 22 23 #差集,a里面有,b里面没有 24 print(s1.difference(s2)) 25 print(s1 - s2) 26 27 #对称差集,把a和b里面都有的去掉 28 print(s1.symmetric_difference(s2)) 29 print(s1^s2)
9、集合实例--验证密码包含大小写字母、数字、特殊字符
1 import string 2 password = input("请输入密码: ").strip() 3 p_set = set(password) 4 print('大写字母取交集',p_set.intersection(set(string.ascii_uppercase))) 5 print('小写字母取交集',p_set.intersection(set(string.ascii_lowercase))) 6 print('数字取交集',p_set.intersection(set(string.digits))) 7 print('特殊字符取交集',p_set.intersection(set(string.punctuation))) 8 if p_set.intersection(set(string.ascii_uppercase)) \ 9 and p_set.intersection(set(string.ascii_lowercase)) \ 10 and p_set.intersection(set(string.digits)) and p_set.intersection(set(string.punctuation)): 11 print("密码合法") 12 else: 13 print("密码包含大写小写特殊字符")
10、json模块
1 #存在文件里面的东西读出来都是字符串 2 #json是一个字符串 3 # 1、json.dumps()把字典转成字符串 4 # 2、json.dump()把字典直接以json字符串存入文件 5 # 3、json.loads()传一个字符串,把json字符串转成字典 6 # 4、json.load(f)#传一个文件,把文件读出来转成字典 7 8 import json 9 10 #json.loads() 传一个字符串,把json字符串转成字典 11 #1、打开文件 12 #2、读取文件内容 13 #3、json.loads把读到字符串转成字典 14 f = open('user4.txt',encoding='utf-8') 15 res = f.read() 16 # print('res的类型',res,type(res)) 17 d = json.loads(res) #把json串转成字典 18 print('d: ',d) 19 20 #使用json.load把字符串转成字典 21 #1、打开文件 22 #2、load 23 f = open('user6.txt',encoding='utf-8') 24 result = json.load(f)#传一个文件,把文件读出来转成字典 25 print(result) 26 27 # json.dumps() 把字典转成字符串 28 #1、打开文件 29 #2、把字典dumps转成字符串 30 #3、把字符串写到文件里面 31 d = {"xiaomi":'123456',"xxx":'中文'} 32 #json.dumps()把字典转成json串,indent参数代表缩进,ensure_ascii=False有中文时不要显示成unicode 33 res = json.dumps(d,indent=4,ensure_ascii=False)#字典转换成字符串 34 print(type(res))#res类型是str 35 f = open('user6.txt','w',encoding='utf-8') 36 f.write(res) 37 38 # json.dump() 把字典直接以json格式存入文件 39 #1、打开文件 40 #2、json.dump 写入 41 d= { 42 "error_code": 0, 43 "stu_info": [ 44 { 45 "id": 8485, 46 "name": "矿泉水2", 47 "sex": "未知", 48 "age": 38, 49 "addr": "天通苑", 50 "grade": "双子座", 51 "phone": "12123685603", 52 "gold": 100 53 } 54 ] 55 } 56 fw = open('kqs.json','w',encoding='utf-8') 57 json.dump(d,fw,indent=4,ensure_ascii=False)#用dump直接把字典存进文件