Python笔记三(互换变量,文件操作,文件指针,集合)

今天我们继续学习python的语法:

一,互换变量

 1 a =1
 2 b =2
 3 c =3
 4 #以前的老方法,其他语言写的
 5 c = None
 6 c = b
 7 b = a
 8 a = c
 9 print(a,b)
10 
11 #python里面交换值
12 b,a = a,b
13 print(a,b) #交换两个变量的值,Python低层帮你引入第三方变量在交换
14 b,a,c=a,c,b#对应值互换
15 
16 
17 #不通过第三方变量交换值
18 a = a+b #3
19 b = a-b #1
20 a = a-b #2
21 print(a,b)
View Code

二,判断【非空即真,非零即真】

 1 #非空即真,非0即真
 2 # 不为空的话就是true,是空的话就是false
 3 # 只要不是0就是true,是0就是false
 4 a=[]#list也是假的
 5 b={}#字典也是假的
 6 c=0 #也是假的
 7 f=tuple() #也是假的
 8 e= ''#也是假的
 9 name = input('输入你的姓名').strip()
10 if name: #name里面有没有东西
11     print('输入正确了')
12 else:
13     print('输入不能为空')
14 
15 #布尔类型
16 #true false
17 print(bool(''))
18 print(bool('aa'))
19 
20 
21 a=b=c=0#这样代表定义了3个变量,值都是0,也可以这样定义
View Code

三.字符串方法

 1 a='python'
 2 print(a.isalpha())#是否全都是汉字或者字母
 3 print(a.isalnum())#只要里面没有特殊符号就返回true
 4 print(a.isupper())#是否全部是大写字母
 5 print(a.islower())#是否全部是小写字母
 6 print(a.isdigit())#是否全部是数字
 7 print(a.isalpha())#判断是否全是汉字或者字母
 8 print(a.isalnum())#只要没有特殊符号,都返回true
 9 
10 
11 import string
12 print(string.ascii_uppercase) #所有小写字母
13 print(string.ascii_lowercase) #所有大写字母
14 print(string.digits) #所有数字
15 print(string.ascii_letters)#所有大写字母和小写字母
16 print(string.punctuation)#所有的特殊字符
17 
18 #下面是两个方法
19 ''.join('') #连接字符串
20 #他把一个list变为字符串
21 # 通过某个字符串把list里面的每个元素连接起来
22 print(','.join(string.ascii_lowercase))
23 # 只要是可以循环的,join都可以帮你连接起来
24 # ''.split('')
25 t=['a','b','c','d']
26 res=''.join(t)
27 res1='-----'.join(t)
28 print(res)
29 print(res1)
30 
31 
32 names='admin,zhansga,hah ,huahu'
33 hh=names.split(',')#根据某个字符串,分割字符串,以谁隔开,谁就不存在了,如果什么都不传的话,是以空格分割的
34 hh1=names.split('h')#aplit只能是字符串方法
35 print(hh,hh1)
36 
37 user = '张三'
38 sex = ''
39 age = 17
40 addr = '珠海'
41 moneny = '10w'
42 cars = '1w台'
43 
44 sql = 'insert into user values ({user},{sex},{age},{addr},{moneny},{che});'
45 new_sql=sql.format(age=age,che=cars,user=user,sex=sex,moneny = moneny,addr=addr)
46 print(new_sql)
47 
48 
49 #加*号
50 print('欢迎登录'.center(50,'*'))
View Code

 四。集合

1.深拷贝与浅拷贝

 1 import copy #引入拷贝模块
 2 #浅拷贝
 3 #深拷贝
 4 l=[1,1,2,3,4,5,6,8]#单独一个list循环删除list里面的数据的时候,结果会不正确
 5 l2=copy.deepcopy(l)#深拷贝 浅拷贝和深拷贝的区别就是深拷贝会重新开辟一个内存空间
 6 print(id(l))
 7 print(id(l2))#获取内存地址id
 8 for i in l2:
 9     if i%2!=0:
10         l.remove(i)
11 print(l)
12 
13 
14 l2=l #浅拷贝
15 l2.append('aa')
16 print(l2)
View Code

2.集合天生去重,集合也是无序的 set表示集合

s = set()#定义空集合
s2 = set('1234445566778')
s3 = {'1','1','3','4','5','6','7','9'}
print(s2)
View Code

3.交集与并集

1 #取交集
2 s2 = set('1234445566778')
3 s3 = {'1','1','3','4','5','6','7','9'}
4 print(s3&s2)#取交集 类型要一致
5 print(s3.intersection(s2))#取交集
6 
7 #取并集  就是把两个集合合并到一起,然后去重
8 print(s2|s3) #取并集
9 print(s2.union(s3))#取并集
View Code

4.差集与对称差集

1 s4 = {1,2,3}
2 s5 = {1,4,6}
3 #取差集  取s4为准,s5里面有的 那么s4就去除这个有的
4 print(s4-s5) #取差集
5 print(s4.difference(s5))#取差集
6 #
7 # #对称差集   去掉两个集合里面都有的
8 print(s4^s5)#对称差集
9 print(s4.symmetric_difference(s5))#对称差集
View Code

5.增加,删除集合

1 s4 = {1,2,3}
2 s5 = {1,4,6}
3 s4.add('ss')#增加元素
4 s4.pop()#随机删一个
5 s4.remove('ss')#指定删除那个
6 s4.update({1,2,4})#把另外一个集合加进去
7 print(s4)
8 s4.isdisjoint(s5)#如果没有交集返回true
View Code

6.用集合校验密码的复杂程度,一个小练习

 1 #校验密码里面是否含
 2 #数字 ,大写字母,小写字母,特殊字符
 3 import string
 4 nums_set = set(string.digits)
 5 upper_set=set(string.ascii_uppercase)
 6 lower_set=set(string.ascii_lowercase)
 7 pun = set(string.punctuation)
 8 for i in range(5):
 9     pwd= input('请输入密码:').strip()
10     pwd_set=set(pwd)
11     if pwd_set&nums_set and pwd_set&upper_set and pwd_set&lower_set and pwd_set&pun:
12         print('密码是合法的:',pwd)
13     else:
14         print('密码必须包含大小写字母,数字,特殊字符')
View Code

 五.文件操作

文件打开分为三种模式:读模式,写模式,追加模式

 1 # python2.0的版本写的是file()
 2 #文件打开的三种方式:读模式  写模式  追加模式
 3 f=open('words2','r',encoding='utf-8')#默认是一个r 读模式
 4 f=open('words','w',encoding='utf-8')#写模式
 5 f=open('words','a',encoding='utf-8')#追加模式
 6 
 7 #简单的打开和读写文件
 8 f=open('words',encoding='utf-8')#打开文件
 9 # windows操作系统下面需要增加encoding不然会报错:UnicodeDecodeError:
10 # 'gbk' codec can't decode byte 0xb9 in position 20: illegal multibyte sequence
11 print(f.read())#读文件
12 print(f.readline())#读取一行内容
13 print(f.readlines())#是把文件的每一行放到一个list里面
14 print(type(f.readlines()))
15 f.write('我是好人haha')#写入  报错:io.UnsupportedOperation: not writable io.UnsupportedOperation: not writable
16 
17 #模式只要沾上R+,文件不存在就会报错
18 #模式只要沾上w+,都会清空原来的内容
19 
20 f=open('words','a+',encoding='utf-8')
21 f.write('哈哈')
22 print(f.read())
23 
24 #读模式 r    读写模式r+
25   #1.不能写
26   #2.文件不存在的话,会报错
27 
28 
29 # f=open('words','w+',encoding='utf-8')
30 # print(f.read())
31 #写模式 w   写读模式w+
32   #1.如果文件不存在的话,会帮你新建一个文件
33   #2.打开一个已经存在的文件,会清空以前的文件内容
34   #3.不能读,报错
35 
36 # f=open('words1','a',encoding='utf-8')
37 # print(f.read())
38 #追加模式 a 追加读模式 a+  文件末尾去增加内容
39 #1.先打开一个不存在,新建一个文件
40 #2.打开一个已经存在的文件,不会清空,末尾增加
41 #3.不能读
View Code

六,文件指针

 1 #文件指针
 2 # 用来记录文件到底读到哪里了
 3 f=open('names','a+',encoding='utf-8')
 4 #a模式默认文件指针是在末尾的 所以读不到文件内容
 5 f.write('呵呵')
 6 print(f.read())
 7 
 8 f = open('name','a+',encoding='utf-8')
 9 f.seek(0)#移动文件指针到最前面 就能读出文件
10 f.write('\n我最美')#移动完文件指针之后,是只能读,写的时候还是在文件末尾写
11 print('read读的:',f.read())
View Code

1.文件指针练习

 1 import random
 2 #随机生成一些手机号  1861253  3453
 3 # print(random.randint(1,9999))#随机产生一个1到1000的数字
 4 # print('1'.zfill(4))#这个方法用于补领
 5 # 1.先随机产生一些手机号
 6 # 2.写到文件里面
 7 f=open('phone.txt','w')
 8 num = input('请输入你要产生的手机号个数:')
 9 for i in range(int(num)):
10     start = '1861253'
11     random_num=str(random.randint(1, 9999))
12     new_num = random_num.zfill(4)
13     phone_num = start+new_num
14     f.write(phone_num+'\n')#\n代表就是换行的意思
15 f.close()#关闭文件
View Code

七,综合上面的讲述,练习题

 1 # 读日志文件,监控日志,如果有攻击我们,就把ip加入黑名单
 2 # 分析
 3 #  1.打开日志文件
 4 #    2.把ip地址拿出来
 5 #    3.判断每一个ip出现的次数,如果大于100次,就加入黑名单
 6 # 每分钟读一次
 7 
 8 #直接循环一个文件对象的话,每次循环的是文件的每一行
 9 #f一般叫做文件句柄 文件对象
10 import time
11 point = 0 #每次记录文件指针位置
12 while True:
13     all_ips=[]#存放所有的ip地址
14     f=open(r'C:\Users\Administrator\Desktop\access.log',encoding='utf-8')#路径前面早呢更加一个r是为了让路径变为一个普通的字符串
15     f.seek(point)#移动文件指针
16     for line in f:
17         ip = line.split()[0]
18         all_ips.append(ip)
19     point = f.tell()  # 获取到当前文件指针的位置 记录指针的位置
20     all_ip_set = set(all_ips)#利用集合去重
21     for ip in all_ip_set:
22         if all_ips.count(ip)>30:
23             print('应该加入黑名单的名单是:%s'%ip)
24     f.close()
25     time.sleep(60)#暂停60秒,隔60秒读一次
View Code

八。自动关闭文件

1 with open('names','a+') as f:
2     for line in f:
3         print(line)
View Code

 

posted @ 2018-04-04 14:57  whereis  阅读(511)  评论(0编辑  收藏  举报