实例演示
1.写一个函数,接受一个参数,如果是文件,就执行这个文件,如果是文件夹,就执行这个文件夹下的所有的py文件
def func(path):
# 先判断这个path是文件还是文件夹,isdir isfile
# 如果是文件,.py结尾的
if os.path.isfile(path) and path.endswith('.py'):
# 执行这个文件 :
os.system('python %s'%path) # 模拟了在cmd中执行代码的过程
# 如果是文件夹
elif os.path.isdir(path):
# 查看这个文件夹下的所有内容 listdir
for name in os.listdir(path):
abs_path = os.path.join(path,name)
# 如果是文件 .py结尾的
if abs_path.endswith('.py'):
# 执行这个文件 : os.system('python %s'%abs_path)
os.system('python %s' % abs_path)
func(r'F:/python/kecheng/day20/code/day20/z20.py')
func(r'F:\python')
2、写一个copy函数,接受两个参数,第一个参数是源文件的位置,第二个参数是目标位置,将源文件copy到目标位置。
还需要判断一下这个文件之前是否存在
def copy(path1,path2):
filename = os.path.basename(path1)
if os.path.isfile(path1) and os.path.isdir(path2):
path2 = os.path.join(path2,filename)
if os.path.exists(path2):print('已有同名文件')
with open(path1,'rb') as f1,open(os.path.join(path2,filename),'wb') as f2:
content = f1.read()
f2.write(content)
copy(r'F:/python/kecheng/day20/code/day20/z20.py',r'F:\python')
3、获取某个文件所在目录的上一级目录,例如'D:\sylar\s15\day19\6.序列化模块.py'目录的结果 :D:\sylar\s15
# 方法1
path = os.path.dirname(r'F:/python/kecheng/day20/code/day20/z20.py')
base_name = os.path.dirname(path)
print(base_name)
# 方法2
base_name = os.path.dirname(os.path.dirname(r'F:/python/kecheng/day20/code/day20/z20.py'))
print(base_name)
4、使用os模块创建如下目录结构
# glance/
#
# ├── __init__.py
#
# ├── api
#
# │ ├── __init__.py
#
# │ ├── policy.py
#
# │ └── versions.py
#
# ├── cmd
#
# │ ├── __init__.py
#
# │ └── manage.py
#
# └── db
#
# ├── __init__.py
#
# └── models.py
# 创建文件夹
# 创建文件
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
open('glance/api/__init__.py','w').close()
open('glance/api/policy.py','w').close()
open('glance/api/versions.py','w').close()
open('glance/cmd/__init__.py','w').close()
open('glance/cmd/manage.py','w').close()
open('glance/db/__init__.py','w').close()
open('glance/db/models.py','w').close()
5、写一个用户注册登陆的程序,每一个用户的注册都要把用户名和密码用字典的格式写入文件userinfo。
在登陆的时候,再从文件中读取信息进行验证。
{'usr':'alex','pwd':'alex3714'}
import pickle
def register():
usr = input('username :')
pwd = input('password : ')
dic = {usr:pwd}
with open('userinfo','ab') as f:
pickle.dump(dic,f)
print('注册成功')
def login():
flag = True
usr = input('username :')
pwd = input('password : ')
with open('userinfo', 'rb') as f:
while flag:
try :
dic = pickle.load(f)
for k,v in dic.items():
if k == usr and pwd == v:
print('登录成功')
flag = False
break
except EOFError:
print('登录失败')
break
register()
login()
6、发红包 random
import random
def red_packet(money,num):
money = money * 100
ret = random.sample(range(1,money),num-1)
ret.sort()
ret.insert(0,0)
ret.append(money)
for i in range(len(ret)-1):
yield (ret[i+1] - ret[i])/100
ret_g = red_packet(200,10)
for money in ret_g:
print(money)
7.计算器
import re
def atom_cal(exp):
if '*' in exp:
a,b = exp.split('*')
return str(float(a) * float(b))
elif '/' in exp:
a, b = exp.split('/')
return str(float(a) / float(b))
def format_exp(exp):
exp = exp.replace('--','+')
exp = exp.replace('+-','-')
exp = exp.replace('-+','-')
exp = exp.replace('++','+')
return exp
def mul_div(exp):
while True:
ret = re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?',exp)
if ret:
atom_exp = ret.group()
res = atom_cal(atom_exp)
exp = exp.replace(atom_exp,res)
else:return exp
def add_sub(exp):
ret = re.findall('[+-]?\d+(?:\.\d+)?', exp)
exp_sum = 0
for i in ret:
exp_sum += float(i)
return exp_sum
def cal(exp):
exp = mul_div(exp)
exp = format_exp(exp)
exp_sum = add_sub(exp)
return exp_sum # float
def main(exp):
exp = exp.replace(' ','')
while True:
ret = re.search('\([^()]+\)',exp)
if ret :
inner_bracket = ret.group()
res = str(cal(inner_bracket))
exp = exp.replace(inner_bracket,res)
exp = format_exp(exp)
else:break
return cal(exp)
s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
ret = main(s)
print(ret,type(ret))