模块作业1.py
# 练习题
# 导入模块的方式有哪几种,官方不推荐哪种?
# import os
# print(os.path)
# from os import name,path
# name()
# from os.path import dirname
# dirname()
# from os import * #并不推荐
# 如何让你写的模块可以被系统上任何一个py文件导入
# 将模块写入第三方模块或者标准库模块
# 写一个用户登录验证程序,文件名account.json,内容如下
# {“expire_date”: “2021-01-01”, “id”: 1234, “status”: 0, “pay_day”: 22, “password”: “abc”}
# 根据用户输入的用户名&密码,找到对应的json文件,把数据加载出来进行验证
# 用户名为json文件名,密码为 password。
# 判断是否过期,与expire_date进行对比。
# 登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。
# import json
# import time
# d = {'expire_date': '2021-01-01', 'id': 1234, 'status': 0, 'pay_day': 22, 'password': 'bc'}
# f = open('account.json','w')
# json.dump(d,f)
#
# count = 0
# while count < 3:
# inp_name = input('请输入你的用户名》'.strip())
# inp_pwd = input('请输入你的密码》'.strip())
# count+=1
# f = open('account.json','r')
# d = json.load(f)
# s = time.strptime(d['expire_date'], '%Y-%m-%d')
# dt = time.mktime(s)
# nt = time.time()
# if dt > nt:
# print('未过期')
# else:
# print('已经过期了')
# if inp_name == 'account.json' and inp_pwd == d['password']:
# print('登录成功')
# break
# else:
# d['states'] = 1
# print('账号已经锁定')
# 4.把第3题用户密码进行hashlib加密处理。即:json文件里的密码保存为md5的值,然后用md5的值进行验证账号信息是否正确。
# import json
# import time
# import hashlib
# d = {'expire_date': '2021-01-01', 'id': 1234, 'status': 0, 'pay_day': 22, 'password': 'bc'}
# f = open('account.json','r+')
# json.dump(d,f)
# count = 0
# # while count < 3:
# # inp_name = input('请输入你的用户名》'.strip())
# # inp_pwd = input('请输入你的密码》'.strip())
# # count+=1
# # f = open('account.json', 'r+')
# # d = json.load(f)
# # del f
# # s = time.strptime(d['expire_date'], '%Y-%m-%d')
# # dt = time.mktime(s)
# # nt = time.time()
# # if dt > nt:
# # print('未过期')
# # else:
# # print('已经过期了')
# # if inp_name == 'account.json' and inp_pwd == d['password']:
# # print('登录成功')
# # m = hashlib.md5()
# # m.update(inp_pwd.encode('utf_8'))
# # d['password'] = m.hexdigest()
# # f = open('account.json','r+')
# # f.write(json.dumps(d))
# #
# #
# # break
# # else:
# # d['states'] = 1
# # print('账号已经锁定')
# 5.最近alex买了个Tesla Model S,通过转账的形式,并且支付了5%的手续费,tesla价格为95万。账户文件为json,请用程序实现该转账行为。
# 需求如下:
# 目录结构为
# ├── account
# │ ├── alex.json
# │ └── tesla_company.json
# └── bin
# └── start.py
# 当执行start.py时,出现交互窗口
# ———- ICBC Bank ————-
# 1. 账户信息
# 2. 转账
# 选择1 账户信息 显示alex的当前账户余额。
# 选择2 转账 直接扣掉95万和利息费用并且tesla_company账户增加95万
# 6.尝试把上一章的验证用户登陆的装饰器添加到提现和转账的功能上。
# f = open('account.json', 'r+')
# d = json.load(f)
# def login(func):
# def inner(*args,**kwargs):
# if d["status"] = 0:
# count = 0
# while count < 3:
# inp_name = input('请输入你的用户名》'.strip())
# inp_pwd = input('请输入你的密码》'.strip())
# count+=1
# if inp_name == 'account.json' and inp_pwd == d['password']:
# print('weFlcome login....')
# d["status"] = 1
# func(*args, **kwargs)
# break
# else:
# print('wrong username or password!')
# else:
# print('welcome login....')
# func(*args, **kwargs)
# return inner
#转账
# @login
# def account():
# import os
# import sys
#
# # 取出当前文件的父目录
# print(__file__) #取出当前文件的路径
# base_dir = os.path.abspath(__file__)
# print(base_dir)
# base_dir1 = os.path.dirname(base_dir)
# print(base_dir1)
# base_dir2 = os.path.dirname(base_dir1)
# print(base_dir2)
#
# # 取出json文件的绝对路径 采用路径拼接的方式
# file1_path = base_dir2 + '\\' + 'account' + '\\' + 'alex.json'
# file2_path = base_dir2 + '\\' + 'account' + '\\' + 'tesla_company.json'
#
# msg ='''
# ------- Luffy Bank ---------
# 1. 账户信息
# 2. 转账
# ''' #字符串多行,必须使用三引号
# print(msg)
# price = 950000
# print(price)
# chocie = int(input('请输入你的选择(1或者2)》'.strip()))
#
# import json
# if chocie == 1:
# f = open(file1_path,'r')
# date = json.load(f)
# f.close()
# print('账户余额:',date)
#
# elif chocie == 2:
# f = open(file2_path,'r+')
# date = json.load(f)
# date += price
# f.seek(0)
# json.dump(date,f)
# f.close()
# fin_price = (1+0.05)*950000
# print('你购买tesla共花费了:',fin_price)
#
# f = open(file1_path,'r+'))
# date = json.load(f)
# date -= fin_price
# f.seek(0)
# json.dump(date.f)
# f.close()
# print('你的当前余额:',date)
# 对上题增加一个需求:提现。
# 目录结构如下
# ├── account
# │ └── alex.json
# │ └── tesla_company.json
# ├── bin
# │ └── start.py
# └── core
# └── withdraw.py
# 当执行start.py时,出现交互窗口
#
# ———- ICBC Bank ————-
# 1. 账户信息
# 2. 提现
# 选择1 账户信息 显示alex的当前账户余额和信用额度。
# 选择2 提现 提现金额应小于等于信用额度,利息为5%,提现金额为用户自定义。
# 提现代码的实现要写在withdraw.py里
#提现# @login
# def withdraw():
# import os
# import sys
# import json
#
# # 取出当前文件的父目录
# print(__file__) #取出当前文件的路径
# base_dir = os.path.abspath(__file__)
# print(base_dir)
# base_dir1 = os.path.dirname(base_dir)
# print(base_dir1)
# base_dir2 = os.path.dirname(base_dir1)
# print(base_dir2)
#
# # 跨模块导入
# sys.path.append(base_dir2)
# print(sys.path)
#
# # 取出json文件的绝对路径 采用路径拼接的方式
# file1_path = base_dir2 + '\\' + 'account' + '\\' + 'alex.json'
# file2_path = base_dir2 + '\\' + 'account' + '\\' + 'tesla_company.json'
# file3_path = base_dir2 + '\\' + 'account' + '\\' + 'account.json'
#
# msg = '''———- ICBC Bank ————-
# 1. 账户信息
# 2. 转账
# 3. 提现'''
# print(msg)
# price = 950000
# print(price)
# chocie = int(input('>'.strip()))
# f = open(file3_path,'r+')
# date = json.load(f)
# f.close()
#
# if chocie == 1:
# print('当前余额:',date['account'])
# print('当前余额:',date['credit'])
# elif chocie == 2:
# f = open(file2_path,'r+')
# date = json.load(f)
# date += price
# f.seek(0)
# json.dump(date,f)
# f.close()
# fin_price = (1+0.05)*950000
# print('你购买tesla共花费了:',fin_price)
#
# f = open(file1_path,'r+'))
# date = json.load(f)
# date -= fin_price
# f.seek(0)
# json.dump(date.f)
# f.close()
# print('你的当前余额:',date)
#
# elif chocie == 3:
# from core import withdraw
# withdraw.takeout()
#
# # withdraw 文件 提现代码实现
# def withdraw.takeout():
# import os
# import sys
# import json
#
# # 取出当前文件的父目录
# print(__file__) #取出当前文件的路径
# base_dir = os.path.abspath(__file__)
# print(base_dir)
# base_dir1 = os.path.dirname(base_dir)
# print(base_dir1)
# base_dir2 = os.path.dirname(base_dir1)
# print(base_dir2)
#
#
# # 取出json文件的绝对路径 采用路径拼接的方式
# file1_path = base_dir2 + '\\' + 'account' + '\\' + 'alex.json'
# file2_path = base_dir2 + '\\' + 'account' + '\\' + 'tesla_company.json'
# file3_path = base_dir2 + '\\' + 'account' + '\\' + 'account.json'
#
# withdraw_price = int(input('请输入提现金额:'.strip()))
#
# f = open(file3_path,'r+')
# date = json.load(f)
# f.close()
#
# if withdraw_price <= date['credit']:
# cost_price = (1+0.05)*withdraw_price
# print('你取出了:',withdraw_price)
# date['account'] -= cost_price
# else:
# print('对不起,超过额度')
# f = open(file3_path,'r+')
# f.seek(0)
# json.dump(date.f)
# f.close()
# 7.对第6题的用户转账、登录、提现操作均记录日志,日志文件位置如下
#
# .
# ├── account
# │ └── alex.json
# ├── bin
# │ └── start.py
# └── core
# | └── withdraw.py
# └── logs
# └── bank.log
# 日志格式如下
#
# 20190502 18:34:23 alex transfer transfered to [tesla_company] with amount RMB950000, intrest is RMB47500.
# 20190812 14:21:15 alex withdraw withdraw cash RMB800, intrest is RMB40.
# 20190815 22:27:19 alex consume consumed cash RMB600 in shop [神仙岛洗浴中心], intrest is RMB0.
# import os
# import sys
# import json
#
# # 取出当前文件的父目录
# print(__file__) #取出当前文件的路径
# base_dir = os.path.abspath(__file__)
# print(base_dir)
# base_dir1 = os.path.dirname(base_dir)
# print(base_dir1)
# base_dir2 = os.path.dirname(base_dir1)
# print(base_dir2)
#
#
# # 跨模块导入
# sys.path.append(base_dir2)
# print(sys.path)
#
# # 取出json文件的绝对路径 采用路径拼接的方式
# file1_path = base_dir2 + '\\' + 'account' + '\\' + 'alex.json'
# file2_path = base_dir2 + '\\' + 'account' + '\\' + 'tesla_company.json'
# file3_path = base_dir2 + '\\' + 'account' + '\\' + 'account.json'
# file4_path = base_dir2 + '\\' + 'logs' + '\\' + 'bank.log'
#
# import logging
# logger = logging.getLogger()
# log_file = logging.FileHandler(file4_path)
# log_file.setLevel(logging.DEBUG)
# file_format = logging.Formatter('%(astime)s' - '%(name)s' - '%(levelname)s' - '%(message)s')
# log_file.setFormatter(file_format)
# logger.addHandler(log_file)
#
# user_status = False
#
# def login(fun):
# def inner(*args, **kwargs): # 可变参数
# _username = "alex"
# _password = "123"
# global user_status
#
# if user_status == False:
# username = input("user:")
# password = input("pasword:")
# if username == _username and password == _password:
# print("welcome login....")
# user_status = True
# else:
# print("wrong username or password!")
#
# if user_status == True:
# fun(*args, **kwargs) # 可变参数
#
# return inner
#
# @login
# def transfer():
# # tesla.json 文件操作
# f = open(file_path2, 'r+')
# data = json.load(f)
# data += price
# f.seek(0)
# json.dump(data,f)
# f.close()
#
# fin_price = price *(1 + 5/100 )
# print('你购买了tesla,花费了', fin_price)
#
# # luffy.json 文件操作
# f = open(file_path1, 'r+')
# data = json.load(f)
# data -= price
# print('余额剩下', data)
# f.seek(0)
# json.dump(data, f)
# f.close()
#
# msg = """
# ------- Luffy Bank ---------
# 1. 账户信息
# 2. 转账
# 3. 提现
# """
#
# print(msg)
# logger.debug('start ... ')
# logger.debug('print menu')
# price = 75000
# print(price)
# choice = int(input('>'))
# logger.debug('enter choice')
#
#
# if choice == 1:
# logger.debug('select account ')
# f = open(file_path3, 'r')
# data = json.load(f)
# f.close()
# print('账户余额', data['account'])
# print('信用额度', data['credit'])
#
# elif choice == 2:
# logger.debug('transform bill ')
# transfer()
#
# elif choice == 3:
# from core import withdraw
#
# logger.debug('withdraw bill ')
# withdraw.takeout()
# 作业
# 题目:网站访问日志分析
#
# 需求:
#
# 统计本日志文件的总pv、uv
#
# 列出全天每小时的pv、uv数
#
# 列出top 10 uv的IP地址,以及每个ip的pv点击数
#
# 列出top 10 访问量最多的页面及每个页面的访问量
#
# 列出访问来源的设备列表及每个设备的访问量
#
# 日志格式解释
#
#
#
# 名词解释:
#
# pv:page visit , 页面访问量,一次请求就是一次pv
#
# uv: user visit, 独立用户,一个ip就算一个独立用户
#
# 数据源:下载链接