六、
1.(1)需求:批量生成9月份每天的txt文件;生成上面的文件之后,再一次在每个文件中写入文件名;
import os
dirname='2021年9月'
for i in os.listdir():
if i ==dirname:
break
else:
os.mkdir(dirname)
for i in range(1,31):
file=open(f'{dirname}/2021-09-{i}.txt','w',encoding='utf-8')
file.write(f'2021-09-{i}.txt')
(2)需求:将上面生成的所有文件名之后加上‘_NEW.’.
import os
os.chdir('2021年9月/')
for i in os.listdir():
os.rename(i,'_NEW.'.join(i.split('.')))
2.需求:假设有一个英文文本文件,编写一个程序读取其内容,并将里面的大写字母变成小写字母,小写字母变成大写字母
# with open('conFig.txt','w',encoding='utf-8') as cf:
# cf.write('ghghGHGH\njkjjjKJKJK')
with open('conFig.txt','r+',encoding='utf-8') as cf:
lines=cf.readlines()
print(lines)
cf.seek(0)
for i in lines;
cf.write(i.swapcase()) #swapcase()大写转小写,小写转大写
七—八、
1.测试列表推导和不用列表推导那一种速度更快
import time
class Runtime:
def __enter__(self):
self.start__time=time.time()
return self.start__time
def __exit__(self, exc_type, exc_val, exc_tb):
self.end_time=time.time()
self.run_time=self.end_time-self.start__time
print('运行时间',self.run_time)
with Runtime():
li=[]
for i in range(1000000):
li.append(i)
with Runtime():
li=[i for i in range(1000000)]
2.range不可以使用小数做步长,实现一个可迭代对象,可以实现小数步长
class Range:
def __init__(self,start,end=None,step=1):
if not isinstance(start,(int,float)):
raise TypeError
elif end!=None and not isinstance(end,(int,float)):
raise TypeError
elif not isinstance(step,(int,float)):
raise TypeError
elif end!=None and start>end:
print('开始值不能大于结束值')
elif step<0:
print('步长不能小于0')
else:
if end==None:
self.start=0
self.end=start
else:
self.start=start
self.end=end
self.step=step
def __iter__(self):
return self
def __next__(self):
from decimal import Decimal
if self.start>=self.end:
raise StopIteration
else:
res=self.start
self.start=Decimal(str(self.start))+Decimal(str(self.step))
return res
for i in Range(1,10.2,0.6):
print(i)
九、
1.利用装饰器,记录函数的运行日志(如:保存传入参数,返回结果,运行时间等信息)
import time
def log(f):
log=[]
def func(*args):
logof={}
logof['args']=args
start=time.time()
res=f(args)
end=time.time()
logof['result'] = res
logof['runtime'] = end-start
log.append(logof)
print(log)
return func
@log
def sum(res):
m=0
for i in res:
m+=i
return m
sum(1,2,3)
sum(1,7)
2.打开一个只读文件,如果文件不存在,则去创建这个文件
try:
f=open('text.txt','r+',encoding='utf-8')
except:
f=open('text.txt','a+',encoding='utf-8')
f.write('猪小屁真可爱')
else:
f.write('猪小屁真可爱')
finally:
f.close
十、
1.检查用户名是否是由字母数字下划线组成
username=input('请输入用户名:')
import re
res=re.match(r'[a-zA-Z0-9_]*$',username)
if res==None:
print('格式不正确')
else:
print('格式正确')
2.检查邮箱是否符合规范
email=input('请输入邮箱:')
import re
res=re.match(r'[0-9a-zA-Z]+@[0-9a-zA-Z]+\.[0-9a-zA-Z]{2,5}',email)
if res==None:
print('格式不规范')
else:
print('格式规范')
3.检查用户的身份证号码是否符合规范(前六位是区号1-8;出生年月日1900-2019,01-12,01-31;)
identity=input()
import re
res=re.match(r'[1-8]\d{5}(?:19[0-9]{2}|20[0-1][0-9])(?:0[1-9]|1[0-2])(?:0[1-9]|1[[0-9]|2[0-9]|3[0-1])[0-9X]{4}$',identity)
if res==None:
print('身份证不规范')
else:
print('身份证规范')
综合应用:定义一个账户类,用于创建账户并生成随机卡号
print('----------------------欢迎使用一个银行系统----------------------')
print('加载中...')
import os
from util import register
##生成目录
dirname='database'
for i in os.listdir():
if i ==dirname:
break
else:
os.mkdir(dirname)
##加载或生成数据文件
with open(f'{dirname}/account.txt','a+',encoding='utf-8') as f:
f.seek(0)
account_poor=f.readlines()
print(account_poor)
print('加载完毕')
##菜单
while True:
print('--------------------------------------------')
menu=input('菜单:1.创建账户;2.退出')
if menu=='1':
res=register('姓名','密码','确认密码')
if res != None: #保存每次运行的用户数据
f.write(f"{res['卡号']} {res['姓名']} {res['密码']}0\n")
f.flush()
elif menu=='0':
break
else:
print('请输入正确的指令')
print('欢迎下次使用')
##util.py文件
import re
import random
from datetime import datetime
##装饰器生成input
def inputs(f):
def func(*args):
res={}
for i in args:
res[i]=input(f'请输入{i}:')
return f(res)
return func
##创建账户
@inputs
def register(kwargs):
message='注册失败,请重试'
if re.match(r'\w{2,10}$',kwargs['姓名'])==None:
print(f'姓名格式错误,{message}')
return
if re.match(r'\S{6,}$',kwargs['密码'])==None:
print(f'密码格式错误,请输入6位数以上的密码并不包含空格,{message}')
return
if kwargs['密码']!=kwargs['确认密码']:
print(f'两次密码输入不一致,{message}')
return
kwargs['卡号']=datetime.now().strftime('%Y%m%d%H%M%S')+str(random.randint(100,999))
message=f'亲爱的{kwargs['姓名']},恭喜您注册成功\n,您的卡号是:{kwargs['卡号']}'
print(message)
return kwargs