模块-练习题

-*- encoding:utf-8 -*-
# 1、计算两个格式化时间之间差了多少年月日时分秒
import time

true_time = time.mktime(time.strptime('2017-09-11 08:30:00', '%Y-%m-%d %H:%M:%S'))
time_now = time.mktime(time.strptime('2017-09-12 11:00:00', '%Y-%m-%d %H:%M:%S'))
dif_time = time_now - true_time
struct_time = time.gmtime(dif_time)
print('过去了%d年%d月%d天%d小时%d分钟%d秒' % (struct_time.tm_year - 1970, struct_time.tm_mon - 1,
                                   struct_time.tm_mday - 1, struct_time.tm_hour,
                                   struct_time.tm_min, struct_time.tm_sec))

# # 2、计算当前时间所在月1号的时间戳

# 方法一:
import time


def func2():
    t = time.time()
    struct_time = time.gmtime()   # 把日期和时间转换为格林威治(GMT)时间
    d = struct_time.tm_mday
    c = t - (d-1) * 24 * 60 * 60
    return c


print(func2())

# 方法二:
import time
def func1():
    print("当前时间:"+time.strftime('%Y-%m-%d %H:%M:%S'))
    print("当前时间戳:%f"% time.time())
    t1 = time.strftime('%Y-%m-{} %H:%M:%S'.format("1"))
    t2 = time.strptime(t1,'%Y-%m-%d %H:%M:%S')
    t3 = time.mktime(t2)
    print("本月一号的时间戳是%f"%t3)
func1()

# # 3、分别列出给定目录下所有的文件和文件夹
import os
print(os.listdir('D:\pythonweekend24\day07'))

# # 4、获取当前文件所在目录
import os
print(os.getcwd())

# # 5、在当前目录下创建一个文件夹、在这个文件夹下创建一个文件
import os
os.mkdir('dirname')
f = open('dirname\\new.txt',encoding="utf8",mode="w")
f.close()

# # 6、计算某路径下所有文件和文件夹的总大小
import os

l1 =[]
def get_size(path):
    filelist = os.listdir(path)  #获取path目录下的所有文件。
    for filename in filelist:
        tempath = os.path.join(path,filename)  # 形成path与filename组合后的路径。
        if os.path.isdir(tempath):  # 判断是否为一个目录。
            get_size(tempath)  #是目录就继续递归查找。
        elif os.path.isfile(tempath): #判断是否为文件
            filesize = os.path.getsize(tempath) #是文件,则获取相应文件的大小
            print("%s的子文件大小:%d字节"%(path,filesize) )
            l1.append(filesize)  # 将文件的大小添加到列表中

path = input("请输入路径:").strip()
get_size(path)
print('目录%s中文件的总大小为%d字节' % (path, sum(l1)))

# # 7、校验两个文件的一致性

import hashlib
def file_hashlib(file):
    ret = hashlib.md5()
    with open(file, mode='rb') as f1:
        for line in f1:
            ret.update(line)
    return ret.hexdigest()

def compare (f1,f2):

    if file_hashlib(f1) == file_hashlib(f2):
        print("两个文件一致")
    else:
        print("两个文件不一致")


compare("下载文件","源文件")

# # 8、加盐的密文登陆
import hashlib
def add_salt(arg):  # 定义带加盐的的加密函数
    add_salt_password = hashlib.md5(bytes('salt', encoding="utf-8"))
    add_salt_password.update(bytes(arg, encoding="utf-8"))
    return add_salt_password.hexdigest()  # 返回加密的数据

def login(usr,password): # 登录函数
    with open("usr", encoding="utf-8",mode='r') as f:
        for line in f:
            u,p = line.strip().split("|")
            if usr == u and add_salt(password) == p:   # 登录时验证用户名和加密的密文跟之前是否一致。
                return True

def register(usr,password):
    with open("usr", encoding="utf-8", mode="a") as f:
        t = usr+"|"+add_salt(password) + "\n"
        f.write(t)
while 1:
    dict ={"用户登录":login,"用户注册":register}
    for i, element in enumerate(dict, 1):
        print(i, element)
    n = input('请您选择:')
    if n == '1':
        usr = input("输入用户名:").strip()
        password = input("输入密码:").strip()
        r = login(usr,password)
        if r == True:
            print("登录成功")
        else:
            print("登录失败")
    elif n == '2' :
        usr = input("输入用户名:").strip()
        password = input("输入密码:").strip()
        register(usr, password)
    else:
        print("账号不存在")
    
# 9、完成一个既可以向文件输出又可以向屏幕输出的日志设置
import logging
# print(logging)

# 创建logging对象
logger = logging.getLogger()

# 创建文件对象
fh1 = logging.FileHandler('a1.log', encoding='utf-8')
fh2 = logging.FileHandler('a2.log', encoding='utf-8')

# 创建屏幕对象
sh = logging.StreamHandler()

formater1 = logging.Formatter(
        fmt='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',  # 显示格式
        datefmt='%Y-%m-%d %H:%M:%S',)

formater2 = logging.Formatter(
        fmt='%(asctime)s %(levelname)s %(message)s',  # 显示格式
        datefmt='%Y-%m-%d %H:%M:%S',)

formater3 = logging.Formatter(
        fmt='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',  # 显示格式
        datefmt='%Y-%m-%d %H:%M:%S',)

# 给对象绑定格式
fh1.setFormatter(formater1)
fh2.setFormatter(formater2)
sh.setFormatter(formater3)

# 给logger对象添加其他对象
logger.addHandler(fh1)
logger.addHandler(fh2)
logger.addHandler(sh)

# 设置logger级别
logger.setLevel(40)
sh.setLevel(40)  # 按照logger对象设置的级别显示
fh1.setLevel(30)
fh2.setLevel(30)

logging.debug('调试模式')  # 10
logging.info('正常运行')  # 20
logging.warning('警告')  # 30
logging.error('错误')  # 40
logging.critical('系统崩了')  # 50

 

posted @ 2018-12-01 14:52  马玉刚  阅读(107)  评论(0)    收藏  举报