os模块习题
os
1.使用python代码统计一个文件夹中所有文件的总大小
1 import os 2 def func(path): 3 size_sum = 0#文件总大小为0 4 name_lst = os.listdir(path)#拿到这个文件夹下所有文件夹和文件 5 for name in name_lst: 6 path_abs = os.path.join(path,name)#将每个文件拼接为目录 7 if os.path.isdir(path_abs):#如果是文件夹 8 size = func(path_abs)#继续打开这个文件 9 size_sum += size 10 else: 11 size_sum += os.path.getsize(path_abs)#是文件就取大小 12 return size_sum 13 14 ret = func(path') 15 print(ret)
2.写一个函数,接收一个参数,如果是文件,就执行这个文件,如果是文件夹,就执行这个文件夹下的所有py文件
1 import os 2 def func(path):#接收文件路径 3 if os.path.isfile(path) and path.endswith(".py"):#如果这个路径是文件且是以.py为结尾(是个py文件) 4 os.system("python %s"% path)#执行这个文件 5 elif os.path.isdir(path):#如果这个路径是文件夹 6 for name in os.listdir(path):#取这个文件夹下的每个子目录 7 abs_path = os.path.join(path,name)#将每个子目录拼接路径 8 if abs_path.endswith(".py"):#如果这个子目录是以.py为结尾 9 os.system("python %s"% ans_path)#执行这个文件 10 func(path)
3.写一个copy函数,接收两个参数,第一个参数是源文件的位置,第二个参数是目标位置,将源文件copy到目标位置,还需要判断一下这个文件之前是否存在
1 import os 2 def copy(path1,path2) 3 filename = os.path.basename(path1)#拿出这个文件的名字 4 if os.path.isfile(path1) and os.path.isdir(path2):#如果path1这个路径是文件而且path2这个路径是文件夹 5 if os.path.exists(path):#如果这个文件名已存在 6 print("已有同名文件") 7 with open(path1,"rb") as f1,open(os.path.join(path2,filename),""wb"") as f2:#以读的方式打开path1,以写的方式打开path2 8 content = f1.read()#读path1的文件 9 f2.write(content)#写入path2 10 copy(path1,path2)
4.获取某个文件所在目录的上一级目录
1 path1 = os.path.dirname(path) 2 base_name = os.path.basename(path1) 3 print(base_name)
可以合并为
1 base_name = os.path.basename(os.path.dirname(path)) 2 print(base_name)
5.写一个用户注册登录的程序,每一个用户的注册都要把用户名和密码用字典的格式写入文件userinfo,在登录的时候,再从文件中读取信息进行验证
1 import pickle 2 #注册 3 def register(): 4 user = input("username:") 5 pwd = input("password:") 6 dic = {"username":user,"password":pwd} 7 with open("userinfo","ab") as f: 8 pickle.dump(dic,f) 9 10 #登录 11 def login(): 12 flag = True 13 user = input("username:") 14 pwd = input("password:") 15 with open("userinfo","rb") as f: 16 while flag: 17 try: 18 dic = pickle.load(f) 19 if user == dic["username"] and pwd == dic["password"]: 20 print("登录成功") 21 flag = False 22 break 23 except EOFError: 24 print("登录失败") 25 break 26 register() 27 login()
6.发红包
1 import random 2 def red_packet(money,num): 3 money = money*100 4 ret = random.sample(range(1,money),num - 1) 5 ret.sort() 6 ret.insert(0,0) 7 ret.append(money) 8 for i in range(len(ret)-1): 9 yield(ret[i+1]-ret[i])/100 10 res = red_packet(200,10) 11 for money in res: 12 print(money)