python 正则 时间
解耦 = 解除耦合
未解除耦合例子
解除耦合例子
问 : 帐号信息在db里为什么要分成一个一个的文件,而不把所有的帐号都放在一个文件里?
答 : 由于A用户正在操作文件,B用户若也操作文件的话,B读到的实际上是个旧文件,当B又保存的时候,就没有把A已经更新的文件保存下去
问 : 如何对登录状态进行校验
哒: 设置个全局变量字典保存用户的个人信息,登录状态,登录成功后可以把信息返回给这个内存变量,给状态置位。
1.定义:
模块:本质就是.py结尾的python文件,用来从逻辑上组织python代码(变量、函数、类、逻辑 : 模块的本质就是实现一个功能)
2.导入方法
import moduel_name
import moduel_name1,modeul_name2
from moduel_name imoprt * (不建议这么使用)
因为当A和B存在相同的function名的时候,会有冲突
from module_alex import logger as log 因为方法使用了别名,所以就不会出现冲突的情况
3.import本质
本质就是把python文件解释一遍
包 :用来从逻辑上组织模块,本质就是一个目录,带一个__init__.py的文件(必须带)
导入包的本质就是执行该包下的__init__.py文件
需要先在sys这个list中把绝对路径加进去
获取绝对路径的话用 os.path.dirname(os.path.abspath(__file__))
import os, sys
#文件的路径
fliename = os.path.abspath(__file__)
print (fliename)
#文件的目录
dir_name = os.path.dirname(fliename)
print (dir_name)
#文件目录的目录
top_dir_name = os.path.dirname(dir_name)
print (top_dir_name)
#添加环境变量
sys.path.append(top_dir_name)
C:\Users\zouyi\PycharmProjects\python_class\python\Day_05\study\study1.py
C:\Users\zouyi\PycharmProjects\python_class\python\Day_05\study
C:\Users\zouyi\PycharmProjects\python_class\python\Day_05
4.导入优化
就是通过from直接引用
from . import test as ffff
5.模块的分类
a : 标准库
b : 开源模块
c : 自定义模块
标准库
1. time 和 datetime
import time
time.localtime #本地当前时间是个元祖
import time
import datetime
#标准时间
print (time.gmtime())
#localtime
print (time.localtime())
#time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=8, tm_wday=3, tm_yday=1, tm_isdst=0)
#取时间年份
s = time.localtime().tm_year
print (s)
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=20, tm_hour=14, tm_min=35, tm_sec=15, tm_wday=5, tm_yday=233, tm_isdst=0)
2016
#元祖转换成时间戳
time.mktime(s)
12312313123
#格式化时间
date_value = time.strftime("%Y-%m-%d %H:%M:%S")
print (date_value)
2016-08-20 14:40:54
datetime模块
import datetime
#获取当前的时间
print (datetime.datetime.now())
#获取三天后的时间
print (datetime.datetime.now()+datetime.timedelta(3))
2016-08-20 15:07:25.001953
2016-08-23 15:07:25.001953
#获取3小时后的时间
print (datetime.datetime.now()+datetime.timedelta(hours = 3))
%a 本地(locale)简化星期名称 %A 本地完整星期名称 %b 本地简化月份名称 %B 本地完整月份名称 %c 本地相应的日期和时间表示 %d 一个月中的第几天(01 - 31) %H 一天中的第几个小时(24小时制,00 - 23) %I 第几个小时(12小时制,01 - 12) %j 一年中的第几天(001 - 366) %m 月份(01 - 12) %M 分钟数(00 - 59) %p 本地am或者pm的相应符 一 %S 秒(01 - 61) 二 %U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 三 %w 一个星期中的第几天(0 - 6,0是星期天) 三 %W 和%U基本相同,不同的是%W以星期一为一个星期的开始。 %x 本地相应日期 %X 本地相应时间 %y 去掉世纪的年份(00 - 99) %Y 完整的年份 %Z 时区的名字(如果不存在为空字符) %% ‘%’字符random模块
import random
#取随机数字串
random.randint(1,3) #顾尾
random.randrange(1,5) #顾头不顾尾
#去随机字符串
random.choice("zouyi") #序列,字符串,中取一个值
random.choice("[1,2,3,4,5]")
#洗牌功能
items = [1,2,3,4,5]
random.shuffle(items)
[1,4,5,2,3]
#取所有字符和数字
import string
checkcode = string.ascii_letters + string.digits
print (checkcode)
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
#随机取数字
str_1 = string.ascii_letters + string.digits
code = random.sample(str_1,5)
code = "".join(code)
print (code)
m = "".join(random.sample(string.ascii_letters+string.digits,4))
print (m)
os模块
#获取当前路径
os.getcwd()
#切换目录
os.chdir(r"c:/")
#递归创建目录
os.makedirs(r"c:/a/b/c/d/")
#递归删除目录
os.removedirs(r"c:/a/b/c/d/")
#展示都有什么文件
os.listdir(r"d:/")
#路径和文件分割
os.path.splite(r"c:/a/b/c/1.txt")
("c:/a/b/c/","1.txt")
#取目录
os.path.basedirname("c:/a/b/c/1.txt")
c:/a/b/c
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cdos.curdir 返回当前目录: ('.')os.pardir 获取当前目录的父目录字符串名:('..')os.makedirs('dirname1/dirname2') 可生成多层递归目录os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirnameos.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirnameos.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印os.remove() 删除一个文件os.rename("oldname","newname") 重命名文件/目录os.stat('path/filename') 获取文件/目录信息os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"os.pathsep 输出用于分割文件路径的字符串os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'os.system("bash command") 运行shell命令,直接显示os.environ 获取系统环境变量os.path.abspath(path) 返回path规范化的绝对路径os.path.split(path) 将path分割成目录和文件名二元组返回os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素os.path.exists(path) 如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path) 如果path是绝对路径,返回Trueos.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回Falseos.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回Falseos.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间configparser模块
用来生成配置文件
生成配置
import configparserconfig = configparser.ConfigParser()config["DEFAULT"] = {'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9'}config['bitbucket.org'] = {}config['bitbucket.org']['User'] = 'hg'config['topsecret.server.com'] = {}topsecret = config['topsecret.server.com']topsecret['Host Port'] = '50022' # mutates the parsertopsecret['ForwardX11'] = 'no' # same hereconfig['DEFAULT']['ForwardX11'] = 'yes'with open('example.ini', 'w') as configfile: config.write(configfile)读取配置
import configparser
conf = configparser.ConfigParser90
config.sections()
config.read()
print (config.['bitbucket.org'])
hashlib模块
import hashlib
m = hashlib.md5()
m.update(b"hello")
print (m.hexdigest()) #十六进制生成
m.update(b"it me")
print (m.hexdigest())
m.update(b"sssssss") #update是把上一个给增加上去了,也就是hello和hexdigest
print (m.hexdigest())
hmac消息加密
h = hmac.new(b"123","test content中文".encode(encoding="utf-8"))
print (h.hexdigest())
正则模块
'.' 默认匹配任意字符(除换行)
'+' 匹配一次换多次
re.search('a.+',"abcdef")
'?' 匹配0次或1次 匹配前一个"字符"一次或0次
re.search("aaa?","aalexaaa")
re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
#findall没有group方法
re.splitall 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换
正则字典模式
正则替换sub
浙公网安备 33010602011771号