05-python

python模块的定义;
Python 模块(Module),是一个Python文件,以.py 结尾,包含了Python 对象定义和Python语句。
模块让你能够有逻辑地组织你的Python代
段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
python中的模块:
1.包和目录的区别,包和模块可以被其他模块导入,但是目录不能被导入
2.新建一个包里面有一个默认__init__.py模块,这个模块是用来初始化当前这个包下的所有内容
3.有__init__.py模块才能称之为包
4.python里面分为自带的模块和自己创建的模块

第一种导入模块的方法,直接导入整个模块

time模块中常见的方法:
time()   #1970到现在经过的秒数
import time
print(time.time())         #1678843708.3597147,就是通过模块名.函数名来进行调用
print(time.ctime())          #固定格式的当前时间  Wed Mar 15 09:29:56 2023
time.sleep(3)                #休眠等待3秒   强制等待
print(time.ctime())

asctime()   转化为asc码格式显示
print(time.asctime())         #   Wed Mar 15 09:33:57 2023

strftime()  时间格式化
print(time.strftime('%Y-%m-%d-%H-%M-%S'))      #2023-03-15-09-36-59

localtime() 当地时间
print(time.localtime())    #显示当地时间

第二种导入模块方法,导入模块中具体的函数

from time import time    #从time的模块中导入time函数
print(time())

from time import ctime     #从time的模块中导入ctime函数
print(ctime())

from time import sleep      #从time的模块中导入sleep函数
sleep(3)

第三种导入模块方法

from time import *
print(time())
print(ctime())
sleep(3)

第四种导入模块的方法。导入具体函数并取别名,不管是函数还是变量、类、常量、对象都可以导入

from time import ctime as a             #给函数取别名为a
print(a())                              #  Wed Mar 15 09:46:18 2023

import os,time,json,sys                 #同时导入多个模块用逗号隔开

第五种导入模块方法,不同层级的模块找上级用.表示

from duoceshi31.test1 import *     #通过包名.模块导入的所有内容(函数),在duoceshi31包建立一个test1.py文件

 

python中的random模块
生成随机浮点数、整数、字符串、甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等
random模块中的常见用法:

random.random()   #该方法是生成0-1之间的浮点数,但是能取到0,取不到1
import random
print(random.random())

random.randint(x,y)  #该方法生成指定范围内的整数,包括开始和结束值
print(random.randint(1,5))

random.randrange(x,y,step)   #生成指定范围内的奇数,不包括结束值
print(random.randrange(1,10,2))     #random.randrange与普通range的使用规则一样,只不过增加随机效果

random.sample(seq,n)   #从序列seq中选择n个随机且独立的元素
list1=['test','dcs31',11,77,55]
print(random.sample(list1,2))             # 已知的列表中随机选取2个元素组成一个新的列表

random.choice(test)  #生成随机字符
name='!@#$#%%$$%^&&**D123'
print(random.choice(name))                    #随机选择一个字符

random.shuffle(list)                 #洗牌(随机数列)
list1=['test','dcs31',11,77,55]
random.shuffle(list1)
print(list1)                         # 多次执行,随机取结果


hashlib.md5()   #MD5加密

import hashlib        #导入hashlib模块  ===》不可逆加密

md5=hashlib.md5()     #通过hashlib模块中的md5函数创建一个对象
md5.update('123456'.encode('utf-8'))    #通过md5对象调用的update函数对字符串123456进行加密
print(md5.hexdigest())            #调用hexdigest()生成一个16进制的且为32位的字符串e10adc3949ba59abbe56e057f20f883e 生成一个密文

import string
num1=string.digits    #利用string模块中digits函数拿到0-9的数字(字符串类型)
num2=string.ascii_letters   #生成52个英文字母
print(num1)
print(num2) 

面试题:
10万的表数据存放在一个数据库里面然后进行同步到其他数据库,同步完成后你怎么保证两个数据库数据是一致的
第一种方法:可以通过对各自用md5加密之后的密文进行比较
第二种方法:用beyond对比工具

1.使用random模块随机生成手机号码、自定义手机号开头前三位

import random,string
def get_phone():
    list1=['153']           #定义一个153开头的列表,手机号码前三位
    num=string.digits        #0-9随机取
    for i in range(8):
        list1.append(random.choice(num))     #append添加,循环八次,每一次随机选择一个放入列表list1中
    print(list1)
    print(''.join(list1))                    #打印最后一次  如果是数字进行拼接需要转化否则报错
get_phone()

2、用random模块随机生成6位数验证码

import random,string
def verify():
    num=string.digits+string.ascii_letters
    # print(random.sample(num,6))
    return (''.join(random.sample(num,6)))

verify()

3、通过md5加密算法把随机生成的6位数验证码进行加密返回16进制的字符串

import hashlib
def code():
    values=verify()   #调用verify函数的返回值
    md5=hashlib.md5()
    md5.update(values.encode('utf-8'))
    print(md5.hexdigest())
if __name__ == '__main__':
    code()

 

 


python中的os模块
os模块提供了多数操作系统的功能接口函数
os模块被导入后,它会自适
应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编
程时,经常和文件、目录打交道,所以离不了os模块


os模块中常见的方法:

import os
os.getcwd()   #获取当前执行命令所在目录
print(os.getcwd())

os.path.isfile()    #判断是否是文件
print(os.path.isfile(r'D:\python\dcs31\duoceshi31'))    #返回是False

os.path.isdir()
print(os.path.isdir(r'D:\python\dcs31\duoceshi31'))       #返回是True

os.path.exists()    #判断文件或者目录是否存在
print(os.path.exists('D:\python\dcs31\lesson1.py'))        #返回True


os.listdir(dirname)    #列出指定目录下的目录或者文件
print(os.listdir('D:\python\dcs31\duoceshi31'))  #返回  ['test1.py', '__init__.py', '__pycache__']

os.path.split(name)   #分割文件与目录
print(os.path.split('D:\python\dcs31\lesson1.py'))  #返回结果:('D:\\python\\dcs31', 'lesson1.py')

os.path.join(path,name)  #拼接目录与文件名或者目录名
print(os.path.join('D:\python\dcs31\duoceshi31','test001.txt'))   #结果:D:\python\dcs31\duoceshi31\test001.txt

os.mkdir(dir)    #创建一个目录
print(os.mkdir('D:\python\dcs31\duoceshi'))    #创建一个目录叫duoceshi

os.rename(old,new)   #更改目录或者文件名称
print(os.rename('D:\python\dcs31\duoceshi','D:\python\dcs31\dcs'))  #把duoceshi更改为dcs
print(os.rename(r'D:\python\dcs31\duoceshi31\test1.py','D:\python\dcs31\duoceshi31\dcs31.py'))   #把test1.py文件改成dcs31.py文件

 

python中的re正则模块,实现一个编译查找
一般在日志处理或者文件处理时用的比较多,正则表达式主要用于模式匹配和替换工作

 预定义字符集匹配:
 \d:数字0-9
 \D:非数字
 \s:空白字符
 \n:换行符
 \r:回车符
 re模块数量词匹配:
 符号^:表示的匹配字符以什么开头
 符号$:表示的匹配字符以什么结尾
 符号*:匹配*前面的字符0次或n次
 eg:ab* 能匹配a 匹配ab 匹配abb
 符号+:匹配+前面的字符1次或n次
 符号?:匹配?前面的字符0次或1次
 符号{m}:匹配前一个字符m次
 符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是正整数

 1.match函数
从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
注意:如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次

import re
str1=re.match('\d','239jnkjhhfds343253565467kjhkj')    #d是匹配0-9,第一个字符符合0-9之间,打印结果2,无+号只匹配一次
str1=re.match('\d','d239jnkjhhfds343253565467kjhkj')     #报错,没有这个属性
str1=re.match('\d*','239jnkjhhfds343253565467kjhkj')     #239  匹配到j自动停止
str1=re.match('\d+','239jnkjhhfds343253565467kjhkj')       #239  匹配到j自动停止
str1=re.match('\d?','239jnkjhhfds343253565467kjhkj')        #2
str1=re.match('\d?','w239jnkjhhfds343253565467kjhkj')      # 为空  0次开始
str1=re.match('\d+','w239jnkjhhfds343253565467kjhkj')       #报错  从1次开始找
str1=re.match('\d*','w239jnkjhhfds343253565467kjhkj')       #为空  从0开始开始找
str1=re.match('\d{2}','239jnkjhhfds343253565467kjhkj')      #23
str1=re.match('\d{4}','239jnkjhhfds343253565467kjhkj')     #报错,因为匹配不到就报错
str1=re.match('\d{2,6}','239jnkjhhfds343253565467kjhkj')   #239   匹配不到就终止
str1=re.match('\d{2,3}','2d39jnkjhhfds343253565467kjhkj')     #报错,匹配不到两次就报错
str1=re.match('\d{2,3}','239jnkjhhfds343253565467kjhkj')      #239
str1=re.match('^2\d','239jnkjhhfds343253565467kjhkj')         #23  因为\d是匹配一次,如果不是2开头就报错
str1=re.match('^2\d{2}','239jnkjhhfds343253565467kjhkj')       #239
str1=re.match('^2\d{3,16}','239jnkjhhfds343253565467kjhkj')     #报错
str1=re.match('^2\D','239jnkjhhfds343253565467kjhkj')           #报错   \D代表匹配非字符
str1=re.match('^2\D','2¥9jnkjhhfds343253565467kjhkj')          #2¥
str1=re.match('^2\D{2,8}','2njjnkjhhfds343253565467kjhkj')        #2njjnkjhh
str1=re.match('^2\D{1,3}$','2njjnkjhhfds@')        #报错   ,以2开头并且包括1-3个非数字字符结尾
str1=re.match('^2\D{1,3}$','2njjnkjhhf2s@')          #报错
str1=re.match('^2\D{1,3}$','2njj')             #结果:2njj
str1=re.match('^2\D{1,3}$','2nj')               #  2nj
str1=re.match('^1[1358][2469]\d{8}$','15488889999')    #匹配以1开头,第二位是【1358】里面随机一位,第三位是【2469】里面的随机一位,以8位结尾数字结果
str1=re.match('^1[0-9][0-9]\d{8}$','12345678909')    #匹配以1开头,第二位是【0-9】里面随机一位,第三位是【0-9】里面的随机一位,以8位结尾数字结果
str1=re.match('^1[a-z][A-Z]\d{8}$','1aA88888888')     #匹配以1开头,第二位是【a-z】里面随机一位,第三位是【A-Z】里面的随机一位,以8位结尾数字结果
print(str1.group())                                # 通过group函数把结果显示出来

2.search
从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错

import re
str1=re.search('\d','239jnkjhhfds343253565467kjhkj')          #2
str1=re.search('\d+','239jnkjhhfds343253565467kjhkj')         #239
str1=re.search('\d*','239jnkjhhfds343253565467kjhkj')        #239
str1=re.search('\d+','a239jnkjhhfds343253565467kjhkj')        #239  从第一次开始找的情况下可以穿透一次 ,直到第二次匹配不到
str1=re.search('\d*','a239jnkjhhfds343253565467kjhkj')         #为空
str1=re.search('\d*','a23n9jnkjhhfds343253565467kjhkj')       #为空
print(str1.group())

3.findall
从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个列表[]

import re
str1=re.findall('\d','239jnkjhhfds343253565467kjhkj')           #['2', '3', '9', '3', '4', '3', '2', '5', '3', '5', '6', '5', '4', '6', '7']
str1=re.findall('\d+','a239jnkjhhfds343253565467kjhkj')         #['239', '343253565467']
str1=re.findall('\D+','a239jnkjhhfds343253565467kjhkj')         #['a', 'jnkjhhfds', 'kjhkj']
str1=re.findall('error','a239jerrorhfdserror3565errorhkjerror') #['error', 'error', 'error', 'error']  通过error匹配,打印出列表的error个数,以列表的形式输出
str1=re.findall('error','a239jnkjhhfds343253565467kjhkjerro')     #[]
str1=re.findall('dcs()dcs','dcs39jnkjhhfds343253565467kjhkjdcs')  #dcs()dcs中的空括号不会匹配前后内容,只会匹配括号里面的内容返回结果:【】注意:碰到小括号只会匹配小括号里面的内容
str1=re.findall('dcs(.+)dcs','dcs39jnkjhhfds343253565467kjhkjdcs')  #['39jnkjhhfds343253565467kjhkj']  匹配任意字符.+是0次或者n次匹配dcs之间输出的内容
str1=re.findall('"values":"(.+)"','"values":"abc12345","values":"asd54321"')   #['abc12345","values":"asd54321'] 匹配取对应键后面所有元素
print(str1)                    #这里不需要group函数 只有match和search函数需要group

4.compile
编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]

import re
str1=re.compile('error')
str2=str1.findall('a239jerrorhfdserror3565errorhkjerror')
print(str2)                         #['error', 'error', 'error', 'error']

 

posted @ 2023-03-27 21:05  jormen  阅读(31)  评论(0编辑  收藏  举报