PYTHON自动化Day4-交换变量,字符串方法,拷贝,集合,文件,文件指针
一.判断
# 非空即真、非0即真 # 不为空的话就是true,是空的话就是false # 只要不是0就是true,是0就是false# 布尔类型 # True False name = input('请输入你的名字:').strip() a = [] #false d={} # false c = 0 #false f = tuple() #false e='' #falseif name: #name里面有没有东西,print('name不是为空的。。') else:print('输入不能为空。。') # a = b = c = 0 #定义了3个变量 ,值都是0
二.交换变量
a = 1 b = 2#交换变量如果不定义第三个变量的方法: a = a+b # 3 b = a-b # 1 a = a-b # 2 print(a,b)#python中的做法: b,a= a,b #交换两个变量的值,Python底层帮你引入了一个的第三方变量在交换, 多个变量交换也可以 如: a,b,c=b,c,a print(a,b)
三. 字符串方法:
print(a.index('t')) #找下标 print(a.find('t')) #找下标 # 1 find()方法:查找子字符串,若找到返回从0开始的下标值,若找不到返回-1 info = 'abca' print( info.find('a'))##从下标0开始,查找在字符串里第一个出现的子串,返回结果:0 info = 'abca' print (info.find('a',1))##从下标1开始,查找在字符串里第一个出现的子串:返回结果3 info = 'abca' print( info.find('333'))##返回-1,查找不到返回-1 # 2 index()方法: # python 的index方法是在字符串里查找子串第一次出现的位置,类似字符串的find方法,不过比find方法更好的是,如果查找不到子串,会抛出异常,而不是返回-1 info = 'abca' print(info.index('a')) print(info.index('33')) # rfind和rindex方法用法和上面一样,只是从字符串的末尾开始查找。print(a.replace('t','T')) #替换 print(a.isdigit()) #是否全都是数字 print(a.islower()) #是否全都是x小写字母 print(a.isupper()) #是否全都是大写字母 print(a.isalpha()) #是否全都是汉字或者字母 print(a.isalnum()) #只要里面没有特殊符号,就返回true &… print(a.upper()) #变成大写 print(a.lower())#变成小写 print(a.startswith('test')) #以xx开头 print(a.endswith('.xls')) # 以xx结尾 import string print(string.ascii_lowercase) #所有的小写字母 print(string.ascii_uppercase) #所有大写字母 print(string.digits) #所有的数字 print(string.ascii_letters) #所有大写字母和小写字母 print(string.punctuation) #所有的特殊字符l=['zhang','liu','liang'] res = ','.join(string.ascii_lowercase) #1、它把一个list变成了字符串 #2、通过某个字符串把list里面的每个元素连接起来 #3、只要是可以循环的,join都可以帮你连起来 names='abcd' print(list(names)) name_list = names.split()#根据某个字符串,分割字符串,什么也不传的话,是以空格分割的 print(name_list) user='牛寒阳' sex='男' age=18 addr='回龙观' money= '1000w' cars='1w台' # words = 'insert into user values ("%s","%s","%s","%s","%s","%s");'%(user,sex,age,addr,money,cars) sql = 'insert into user values ("{name}","{sex}","{age}","{addr}","{qian}","{che}");' new_sql = sql.format(age=age,che=cars,name=user,sex=sex,qian=money,addr=addr) print(new_sql) print('欢迎登录'.center(50,'*'))
print('1'.zfill(4)) #自动补足4位,前面补0
四.深拷贝,浅拷贝
# int float list dict tuple set # 天生去重 import copy #浅拷贝 #深拷贝 lis = [1,1,2,3,4,5,6,8] l2 = copy.deepcopy(lis) #深拷贝 # l2 = lis #浅拷贝 print(id(lis)) print(id(l2)) #id和lis的不同 l2.append('aaa') lis.remove(8) print(lis) print(l2) # print(id(l)) print(id(l2)) #浅拷贝和深拷贝的区别就是深拷贝会重新开辟一个内存空间,连个list相互独立不受影响#动态循环删list里面的数据的时候,结果会不正确 l=[1,1,2,3,4,5,6,8] # 0 1 2 3 4 5 6 7 第一次取下标0的元素1,然后删掉 # [1,2,3,4,5,6,8] # 0 1 2 3 4 5 6 第二次取下标1的元素2, 所以第一个元素被跳过了没有检查 print(l) for i in l:if int(i)%2!=0:l.remove(i) print(l) #[1, 2, 4, 6, 8] #为什么多了一个1?因为是根据下标循环list的,操作后元素的位置变了#所以我们定义两个相同的list,用第二个循环,用第一个删除,结果就正确了,因为可以保证没有元素都被检查到了 l2=copy.deepcopy(l) for i in l2:if int(i)%2!=0:l.remove(i) print(l)
五.集合
# 集合天生就能去重,集合也是无序的 s=set() #空集合 s2 = set('1234445566778') # print(s2) s3 = {'1','1','3','4','5','6','7','9'} #自己定义一个集合,和字典的区别是字典有key:value #d = {'k':'v'} #字典 # 交集 并集 差集 # 就是两个集合相同的地方 print(s3 & s2) #取交集 print(s3.intersection(s2)) #取交集 #并集# 就是把两个集合合并到一起,然后去重 print(s2 | s3) #取并集 print(s2.union(s3)) #取并集 s4 = {1,2,3} s5 = {1,4,6} #差集#在一个集合里有,在另一个集合里面没有的 # S4里面有,s5里面没有的 # 取一个集合存在,另一个不存在的元素 print( s4 - s5) #取差集 print(s4.difference(s5)) #取差集 #对称差集#俩集合里面都没有#去掉俩集合里面都有的 print(s4 ^ s5) print(s4.symmetric_difference(s5)) s4.add('ss') #加元素 s4.pop()#随机删一个 s4.remove('ss')#指定删除哪个 s4.update({1,2,3}) #把另外一个集合加进去 s4.isdisjoint(s5)#如果没有交集的话返回true,可以用于判断是否不包含黑名单中的内容
学会了集合后,判断密码复杂性就更方便了:
# 校验密码里面是否包含 # 数字、大写字母、小写字母、特殊符号 import string nums_set = set(string.digits) upper_set = set(string.ascii_uppercase) lower_set = set(string.ascii_lowercase) pun = set(string.punctuation) for i in range(5):pwd=input('请输入密码:').strip()pwd_set = set(pwd)if pwd_set & nums_set and pwd_set & upper_set and pwd_set & lower_set and pwd_set & pun:print('密码是合法的',pwd)else:print('密码必须包含大写字母、小写字母、数字和特殊字符')
六.文件操作
# python 2 3 # file() #python2中有,python3中没有 #utf-8 bbk # 读模式 写模式 追加模式 f = open('names','r',encoding='utf-8') #python3和python2中都有 ,r模式指针在文件开头,读过后到末尾 print(f.read()) #读文件 # f.seek(0) print(f.readline()) #读取一行内容 # f.seek(0) print(f.readlines()) #是把文件的每一行放到一个list里面 # f.write('双方都')#写入 # f.seek(0) # print(f.read()) #只要沾上了r,文件不存在的就会报错 #只要沾上了w,都会清空原来的内容# 读模式 r 读写模式 r+#1、不能写#2、文件不存在的话会报错 # 写模式 w 写读模式 w+#1、文件不存在的话,会帮你新建文件#2、打开一个已经存的文件,他会清空以前文件的内容#3、不能读# 追加模式 a 追加读模式 a+ #文件末尾去增加内容# 1、文件不存在的话,会帮你新建文件# 2、打开一个已经存的文件,不会清空,末尾增加# 3、不能读
七.文件指针
# 文件指针: # 用来记录文件到底读到哪里了 f = open('naems','a+',encoding='utf-8') # a模式的文件指针是在末尾的 f.write('呵呵呵') f.seek(0) #移动文件指针到最前面 f.write('鹏妹妹') #移动完文件指针之后,是只能读,写的时候还是在文件末尾写 f.seek(0) print(f.read())
小练习,自动产生电话号码,并写入到一个文件中:
import random #18612343, #12384234 # 1861253 2945 print(random.randint(1,9999)) print('1'.zfill(4)) #自动补足4位,前面补0#1、先随机产生一些手机号 #2、写到文件里面 f = open('phones.txt', 'w') num = input('请输入你要产生的手机号个数:') for i in range(int(num)): # start = '1861235'random_num = str(random.randint(1, 9999))new_num = random_num.zfill(4)#补0phone_num = start+new_num f.write(phone_num+'\n') f.close()
小练习:
#需求 # 1、监控日志,如果有攻击咱们的,就把ip加入黑名单#分析:#1、打开日志文件#2、把ip地址拿出来#3、判断每一个ip出现的次数,如果大于100次的话,加入黑名单#4、每分钟读一次#直接循环一个文件对象的话,每次循环的是文件的每一行 #文件句柄 文件对象 import timepoint = 0 # 每次记录文件指针的位置 while True:all_ips = [] #存放所有的ip地址f = open('access.log',encoding='utf-8')f.seek(point)#移动文件指针for line in f:ip = line.split()[0]all_ips.append(ip)point = f.tell() #记录了指针的位置all_ip_set = set(all_ips) # for ip in all_ip_set:if all_ips.count(ip)>50:print('应该加入黑名单的ip是%s'%ip)f.close()time.sleep(60) #暂停60秒# for i in all_ips: # if all_ips.count(i)>100: # print('攻击的ip是%s'%i)
八.自动关闭文件
with open('geci','a+') as f:for line in f:pass
作业:
#1、写一个自动生成密码文件的程序 1、你输入几,文件里面就给你产生多少条密码 2、密码必须包括,大写字母、小写字母、数字、特殊字符 3、密码不能重复 4、密码都是随机产生的 5、密码长度6-11 http://www.nnzhp.cn/archives/150 随机数怎么用 参考 random模块怎么用
import random,string i = input("请输入需要产生的条数:") f = open("passwd.txt",'w') str = string.ascii_letters + string.punctuation + string.digits list = [] passwd_insert='' a = 0 while a<int(i):passwd_new = []passwd_new.append(random.choice(string.digits))passwd_new.append(random.choice(string.punctuation))passwd_new.append(random.choice(string.ascii_lowercase))passwd_new.append(random.choice(string.ascii_uppercase))passwd_new=random.sample(str,random.randint(2,7)) + passwd_newrandom.shuffle(passwd_new)print(passwd_new)passwd_insert = ''.join(passwd_new)if list.count(passwd_insert):continueelse:list.append(passwd_insert)f.write(passwd_insert + '\n')a+=1 f.close()
#2、写一个注册的程序,账号和密码都存在文件里面。 choice = input('请输入你的选择:1,注册2、删除用户3、登录') #注册 输入 账号 密码 密码确认 # #需要校验用户是否存在,两次输入的密码,是否一致,为空的情况 #账号和密码都存在文件里面 #删除 输入一个用户名 #需要校验用户是否存在 #登录 输入账号密码登录
user_info = {} #存放所有的用户 with open('users.txt') as f:for line in f:# niuhanyang,123456\nline = line.strip()temp = line.split(',')username = temp[0]pwd = temp[1]user_info[username]=pwd for i in range(3):choice = input('请输入你的选择''1、登录 2、注册 3、删除').strip()if choice=='1':username = input('username:').strip()pwd = input('pwd:').strip()if username and pwd:if username in user_info:if user_info.get(username)==pwd:print('登录成功')else:print('账号密码错误!')else:print("user not found!")else:print('账号密码不能为空!')elif choice=='2':username = input('username:').strip()pwd = input('pwd:').strip()cpwd = input('cpwd:').strip()if username and pwd and cpwd:if username in user_info:print('该用户已经被注册!')else:if pwd==cpwd:user_info[username]=pwdprint('恭喜,注册成功!')else:print('两次输入的密码不一致!')else:print('不能为空!')elif choice=='3':username = input('username:').strip()if username:if username in user_info:user_info.pop(username)print('删除成功!')else:print('不能为空!')else:print("输入有误,请重新输入") else:with open('users.txt','w') as fw:for uname,pwd in user_info.items():fw.write(uname+','+pwd+'\n')
转载于:https://www.cnblogs.com/lilyzhang-2018/p/9878495.html
PYTHON自动化Day4-交换变量,字符串方法,拷贝,集合,文件,文件指针相关推荐
- python自动化办公、Excel数据处理方法总结
目录 0. 概述 1. 读取(打开)excel 2. 不规则数据结构pd.read读取 3. xw选取数据转成dataframe 4. xw定位行列位置,将处理结果填入表中 5. xw追加(粘贴)数据 ...
- Python中最常用的字符串方法!
字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串还有一些专属于它们的附加方法.下图显示了所有这些可用的方法: Pyt ...
- [转载] python判断字符串中包含某个字符串_干货分享| Python中最常用的字符串方法
参考链接: Python中字符串string capitalize 字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串 ...
- python 类中的变量、方法
一. python 类中的变量分为类变量,实例变量,self # coding:utf-8class A(object):date = '20201215' # 类变量def __init__(sel ...
- Python中常用的格式化字符串方法
下面写了下我所了解的三种格式化字符串方法,推荐第三种 第一种方式: 常用'%s'.'%f'.'%d'. 符号 描述 %s 格式化为字符串,采用 str() 显示 %r 格式化为字符串,采用 repr( ...
- python列表添加元素的三种方法定义集合数据对象_(1) List,tuple,dictionary,Python语法基础集,一,之,列表,元组,字典,集合...
Python序列(列表.元组.字典.集合) 一.列表(List)与列表推导式 (一)列表(list) 1.列表是Python内置 可变序列 (列表中元素可增加删除或修改): 2.列表元素放在一对中括号 ...
- python学习日记(2)——变量|字符串|数字布尔类型
目录 1 变量(Variable) 2 字符串(string) 2.1 转义字符 2.2 比较运算符 3 小游戏改进 4 数字类型 4.1 整数 4.2 浮点数 4.3 复数 4.4 数字运算 ...
- Selenium2+python自动化5-操作浏览器基本方法
前言 前面已经把环境搭建好了,这从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是 ...
- python同时替换多个字符串方法
import rewords = '''钟声响起归家的讯号在他生命里仿佛带点唏嘘黑色肌肤给他的意义是一生奉献 肤色斗争中年月把拥有变做失去疲倦的双眼带着期望今天只有残留的躯壳迎接光辉岁月风雨中抱紧自由 ...
最新文章
- 在实际案例(费用系统)中落地DDD
- boost::detail模块实现二分法查找的测试程序
- Android-使用嵌入式SQLite
- 2010C语言添加背景图片_2019级C语言大作业 - 火柴人试炼之地
- 《深度学习》图像超分初识
- Tablet UI模式: 中心舞台
- 福利网站!程序员面试——算法工程师面试大全第一部分
- 道理与例子【人人都是产品经理:9009】
- 001.DIV 标签添加滚动条
- c语言程序设计最后一题调试时闪退,visual studio 2017调试时闪退。
- Fortran入门教程(六)——循环结构
- 用java怎么实现多语言翻译_快速实现中文翻译多国语言
- 计算机考试网页制作演示视频教程,历年职称计算机考试网页制作真题及答案_计算机网页制作教程...
- python123平台第四周作业答案_python123答案
- 前端工程师月薪上万的秘密
- ATT CK 阶段之 Initial Access --Drive-by Compromise
- 分享一个查看外网IP的工具
- 用putty连接虚拟机下ubuntu ssh
- Esxi7.0.2安装点心云虚拟机,实现闲置宽带共享。收益丰厚~
- Python分支语句练习题
热门文章
- 【IT笔试面试题整理】判断链表是否存在环路,并找出回路起点
- 人物肖像速写_深度视频肖像
- 随机模拟_随机模拟可帮助您掌握统计概念
- 一台7纳米光刻机月产能有多大,何为能卖上亿美元?
- 有多少恐怖小说家就应该有多少种吓唬人的方法
- Intel Media SDK H264 encoder GOP setting
- 学python五大理由_学习Python的五大理由
- 图形学教程Lecture 14: RayTracing1(Acceleration Radiometry)知识点总结
- Tensorflow 指令加速
- 【Ogre-windows】旋转矩阵及位置解析