• 写一个用户登录验证程序,文件如下1234.json
{"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
  1. 用户名为json文件名,密码为 password。
  2. 判断是否过期,与expire_date进行对比。
  3. 登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。
 # coding:utf-8
import json,os
import datetime
# data = {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
#
# f = open('%s.json'%(data['id']),'w',encoding='utf-8')
#
# json.dump(data,f)
# filename = '1234.json'
def load_data(file):
f = open(file)
data = json.load(f)
return data
def save_data(data):
f = open('%s.json'%data['id'],'w')
json.dump(data,f)
f.close()
try_count = 0
while True:
username = input('username:').strip()
password = input('password:').strip()
filename = '%s.json'%username
if os.path.isfile(filename):
data = load_data(filename)
expire_date = data['expire_date']
date_now = datetime.datetime.now()
if date_now > datetime.datetime.strptime(expire_date,'%Y-%m-%d'):
print("账户已过期")
break
elif data['status'] != 0:
print('账户已被锁定')
break
elif data['password'] == password:
print('welcome to login'.center(20,'*'))
break
else:
print('wrong password')
try_count += 1
if try_count == 3:
data['status'] = 1
save_data(data)
break
else:
print('user not exist')
  • 把三次验证的密码进行hashlib加密处理。即:json文件保存为md5的值,然后用md5的值进行验证
 # coding:utf-8
import json,os
import datetime
import hashlib data = {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"} # f = open('%s.json'%(data['id']),'w',encoding='utf-8')
#
# json.dump(data,f)
# filename = '1234.json'
def load_data(file):
f = open(file)
data = json.load(f)
return data
def save_data(data):
f = open('%s.json'%data['id'],'w')
json.dump(data,f)
f.close() password = bytes(data['password'],encoding='utf-8')
m = hashlib.md5(password).hexdigest()
data['password'] = m
save_data(data) try_count = 0
while True:
username = input('username:').strip()
password = input('password:').strip()
filename = '%s.json'%username
if os.path.isfile(filename):
data = load_data(filename)
expire_date = data['expire_date']
date_now = datetime.datetime.now()
input_pwd = bytes(password,encoding='utf-8')
m_input_pwd = hashlib.md5(input_pwd).hexdigest() if date_now > datetime.datetime.strptime(expire_date,'%Y-%m-%d'):
print("账户已过期")
break
elif data['status'] != 0:
print('账户已被锁定')
break
elif data['password'] == m_input_pwd:
print('welcome to login'.center(20,'*'))
break
else:
print('wrong password')
try_count += 1
if try_count == 3:
data['status'] = 1
save_data(data)
break
else:
print('user not exist')
  • 写一个6位随机验证码程序(使用random模块),要求验证码中至少包含一个数字、一个小写字母、一个大写字母.
 >>> word = random.choice(string.digits) + random.choice(string.ascii_lowercase) + random.choice(string.ascii_uppercase) + ''.join(random.sample(string.ascii_letters,3))
>>> word
'1eIigX'
  • logging模块有几个日志级别?
 logging模块共5个级别,它们分别是:
DEBUG INFO WARNING ERROR CRITICAL
  • 请配置logging模块,使其在屏幕和文件里同时打印以下格式的日志
2017-10-18 15:56:26,613 - access - ERROR - account [1234] too many login attempts
 import logging

 logger = logging.getLogger('access')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
fl = logging.FileHandler('access.log')
logger.addHandler(ch)
logger.addHandler(fl)
formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
ch.setFormatter(formatter)
fl.setFormatter(formatter)
logger.error("account [1234] too many login attempts")
  • json、pickle、shelve三个区别是什么?
 首先,这三个模块都是序列化工具。
1. json是所有语言的序列化工具,优点跨语言、体积小.只能序列化一些基本的数据类型。int\str\list\tuple\dict
pickle是python语言特有序列化工具,所有数据都能序列化。只能在python中使用,存储数据占空间大.
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。
2. 使用方式,json和pickle用法一样,shelve是f = shelve.open('shelve_test')
  • json的作用是什么?
    序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes
 传输数据
  • subprocess执行命令方法有几种?
有三种方法,他们分别是
run()方法
call()方法
Popen()方法
  • 为什么要设计好目录结构?
1.可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。

2.可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。
  • 打印出命令行的第一个参数。例如:python argument.py luffy    打印出 luffy
import sys
print(sys.argv[1])
  • 获取文件所在目录代码如下:
'''
Linux当前目录/usr/local/nginx/html/
文件名:index.html
'''
import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath('index.html'))) print(BASE_DIR) 打印的内容是什么?
答案
/usr/local/nginx
  • os.path.dirname和os.path.abspath含义是什么?

os.path.dirname:指定文件的目录

os.path.abspath:指定文件的绝对路径

  • 通过configparser模块完成以下功能
文件名my.ini

[DEFAULT]

[client]
port = 3306
socket = /data/mysql_3306/mysql.sock [mysqld]
explicit_defaults_for_timestamp = true
port = 3306
socket = /data/mysql_3306/mysql.sock
back_log = 80
basedir = /usr/local/mysql
tmpdir = /tmp
datadir = /data/mysql_3306
default-time-zone = '+8:00'

q

  1. 修改时区 default-time-zone = '+8:00' 为 校准的全球时间 +00:00
  2. 删除 explicit_defaults_for_timestamp = true
  3. 为DEFAULT增加一条 character-set-server = utf8
import configparser

config = configparser.ConfigParser()
config.read('my.ini')
config.set('mysqld','default-time-zone','+00:00')
config.remove_option('mysqld','explicit_defaults_for_timestamp')
config.set('DEFAULT','character-set-server','utf8')
config.write(open('my.ini','w'))

a

[DEFAULT]
character-set-server = utf8 [client]
port = 3306
socket = /data/mysql_3306/mysql.sock [mysqld]
port = 3306
socket = /data/mysql_3306/mysql.sock
back_log = 80
basedir = /usr/local/mysql
tmpdir = /tmp
datadir = /data/mysql_3306
default-time-zone = +00:00

o

  • 利用正则表达式提取到 luffycity.com ,内容如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>luffycity.com</title>
</head>
<body>
</body>
</html>

q

import re
f = open('index.html','r',encoding='utf-8')
data = f.read()
print(re.findall('luffycity.com',data))

a

S4 exercise -- 模块的更多相关文章

  1. Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析

    前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...

  2. 【Python基础】lpthw - Exercise 40 模块、类和对象

    一. 模块(module) 模块中包含一些函数和变量,在其他程序中使用该模块的内容时,需要先将模块import进去,再使用.操作符获取函数或变量,如 # This goes in mystuff.py ...

  3. python基础-模块

    一.模块介绍                                                                                              ...

  4. Unity加载模块深度解析(纹理篇)

    在游戏和VR项目的研发过程中,加载模块所带来的效率开销和内存占用(即“加载效率”.“场景切换速度”等)经常是开发团队非常头疼的问题,它不仅包括资源的加载耗时,同时也包含场景物件的实例化和资源卸载等.在 ...

  5. oop、configparser、xml模块

    本节大纲:一:在python中,有两种编程思想.1:函数式编程.2:oop.无论是函数式编程还是oop都是相辅相成.并不是说oop比函数式编程就好.各有各的优缺点.在其他语言中java等只能以面向对象 ...

  6. Web应用程序系统的多用户权限控制设计及实现-栏目模块【8】

    前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的基本模块-栏目模块.栏目模块涉及到的数据表为目录表. 1.1栏目域 为了更规范和方便后期系统的二次开发和维护 ...

  7. Mininet实验 使用l2_multi模块寻找最短路径实验

    参考:使用l2_multi模块寻找最短路径实验 1. 实验目的 1.认识VND并且掌握其基本使用方法. 2.学会使用pox控制器的l2_multi模块寻找主机间的最短传输路径. 2. 实验原理 VND ...

  8. Python开发【第一篇】Python基础之自定义模块和内置模块

    为什么要有模块,将代码归类.模块,用一砣代码实现了某个功能的代码集合. Python中叫模块,其他语言叫类库. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代 ...

  9. Python标准库之os模块

    1.删除和重命名文件 import os import string def replace(file, search_for, replace_with): # replace strings in ...

随机推荐

  1. kafka offset 设置

    from kafka import KafkaConsumer from kafka import TopicPartition from kafka.structs import OffsetAnd ...

  2. int和Integer区别

    Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper cl ...

  3. 数据报表之Excel操作模块

    Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及图表,在系统运营方面广泛用于运营数据报表,比如业务质量.资源利用.安全扫描等报表,同时也是应用系统常见的文件导出格式,以便数据使用人员做进 ...

  4. NUMA体系结构介绍

    为什么会有NUMA? 在NUMA架构出现前,CPU欢快的朝着频率越来越高的方向发展.受到物理极限的挑战,又转为核数越来越多的方向发展.如果每个core的工作性质都是share-nothing(类似于m ...

  5. cobbler配置解析

    1.Cobbler命令说明: 命令名称 命令用途 cobbler check 检查cobbler配置 cobbler list 列出所有的cobbler元素 cobbler report 列出元素的详 ...

  6. How to Pronounce INTERNATIONAL

    How to Pronounce INTERNATIONAL Share Tweet Share Tagged With: Dropped T How do you pronounce this lo ...

  7. 【Java】JVM(六)虚拟机字节码执行引擎

    一.概述 执行引擎是虚拟机中最核心的部分之一, 虚拟机自己实现引擎,自己定义指令集和执行引擎的结构体系. 二.栈帧 栈帧包含(1)局部变量表.(2)操作数栈.(3)动态链接.(4)方法返回地址.(5) ...

  8. 用NBU无法还原数据库到ASM磁盘

    描述:用NBU无法还原数据库到ASM磁盘,却可以还原到数据库本地磁盘 错误提示: ORA-15025: could not open disk "/dev/mapper/DATA1" ...

  9. java学习笔记----@Override的作用

    初学java或多或少都会有这样的疑问,@Override有什么用,有的时候写,有的时候又不写,搞的初学者甚是郁闷. 做了一两年的开发说起这个问题不一定能够对答如流.小弟才疏学浅,花了点时间,看了一下资 ...

  10. css3自定义placeholder字体颜色

    ::-webkit-input-placeholder{color:#f00;} ::-moz-placeholder{color:#f00;} :-moz-placeholder{color:#f0 ...