python中的 time模块 、 randdom 模块 、String模块、os模块 、re正则模块

本文深入探讨Python中的模块概念,介绍了time、random、hashlib和os等库的常见用法,如时间操作、随机数生成、MD5加密解密以及文件操作。同时,讲解了正则表达式的匹配规则和函数,展示了在实际问题中的应用。
摘要由CSDN通过智能技术生成

什么是模块?

        Python 模块(Module),是一个 Python文件,以 .py 结尾。 包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代码更好用,更易懂。 模块能定义函数,类和变量,模块里也能包含可执行的代码。

1、包和目录的区别:包和模块可以被其他模块访问、但是目录不能被导入

2、新建一个包里面默认一个__init__.py模块、这个模块是用来初始化当前这个包下面的所有文件

3、有__init__.py模块才称为包

4、python 里面分为自带的模块和自己创建的模块

 time模块

import time        # 用import关键字导入time模块
​
time模块中常见的方法:
time()             # 1970到现在的经过的秒数
ctime()            # 固定格式的当前时间
sleep(3)           # 休眠 单位是秒
asctime()          # 转换为asc码显示当前时间
strftime()         # 时间格式化输出

第一种导入模块的方法

import time             # 用import关键字导入time模块

print(time.time())      # 1970年到当前时间的秒数  # 通过模块名.函数名来调用
print(time.ctime())     # 当前时间和日期
time.sleep(3)           # 线程等待
print(time.asctime())   # 当前时间和日期
print(time.strftime('%Y-%m-%d-%H-%M-%S'))   # 格式化输出日期 2021-06-12-11-12-39

第二种导入模块的方法

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

第三种导入模块的方法

from time import *          # 通过time模块导入所有的函数
print(time())
print(ctime())
sleep(2)
print(asctime())

第四种导入模块的方法

导入具体的函数并且取别名、不管是函数、变量、常量、类、对象都可以导入

from time import sleep as a    # 通过time模块导入sleep函数取别名为a
from time import asctime as s
print(s())
a(2)
print(s())

第五种导入模块的方法

from home.test import *      # 通过项目包.模块名导入所有的内容(test.py文件)
print(num)

randdom模块

生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱 一组数据等

import random

# # random.random()              该方法是生成0-1之间的浮点数,但是能取到0,但是取不到1
print(random.random())           # 0.31373082178802303
​
# # random.randint(x,y)          该方法生成指定范围内整数,包括开始和结束值
print(random.randint(1,5))
​
# # random.randrange(x,y,step)      生成指定范围内的奇数,不包括结束值
print(random.randrange(1,10,2))
​
# # random.randrange(x,y,step)      生成指定范围内的偶数,不包括结束值
print(random.randrange(0,10,2))
​
# # random.sample(seq,n)            从序列seq中选择n个随机且独立的元素
list1 = ['test','dcs',11,88,9,34]
print(random.sample(list1,3))       # 随机从列表中选取3个元素组成新的列表
​
# # random.choice(test)             生成随机字符
name = '*^%%$^^&&*((12333'
print(random.choice(name))
​
# # random.shuffle(list)            # 洗牌(随机数列)
list1 = ['test','dcs',11,88,9,34]
random.shuffle(list1)
print(list1)

​MD5加密

# # hashlib.md5()       MD5加密

import hashlib                           # 导入hashlib模块==》不可逆转的加密
md5 = hashlib.md5()                      # 通过hashlib模块中的md5函数创建一个对象

md5.update('123456'.encode('utf-8'))     # 通过md5对象调用update函数对字符串'123456'加密

print(md5.hexdigest())                   # 通过md5对象调用update函数生成一个16进制并且为32位的字符串:e10adc3949ba59abbe56e057f20f883e

将999999以下的数的md5值存入md5.txt文件中

import hashlib

with open('md5.txt', 'w') as f:
    print('正在写入。。。')
    for i in range(0, 999999):
        md5 = hashlib.md5(str(i).encode()).hexdigest() + '\n'

        f.write(md5)
    print('写入完成。')

将123456的MD5(e10adc3949ba59abbe56e057f20f883e)值解密

def md5decrypt(num: str):
    with open('md5.txt', 'r') as f:
        result = 0
        for line in f:
            line = line.split('\n')
            if num == line[0]:
                print('解密成功,密文为:', result)
                return result
            else:
                result += 1
        print('解密失败!')
        return None

if __name__ == '__main__':
    r = md5decrypt('e10adc3949ba59abbe56e057f20f883e')
    if r:
       print('解密成功:', r)
    else:
        print('解密失败!')

String模块

生成26个大写字母和小写字母

import string
num1 = string.ascii_letters
print(num1)                 # 结果为: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

生成0-9的数字

import string
str1 =string.digits
print(str1)                  # 结果为:0123456789

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

import random
import string
def cc():
    lis=['157']
    num=string.digits
    for i in range(8):
        a=random.choice(num)
        lis.append(a)
    print(''.join(lis))
​
cc()

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

import random
a = range(3,100,2)
b = random.sample(a,9)          # 从序列seq中选择n个随机且独立的元素
print(b)
print(random.randint(0, 9))     # 指定范围内整数,包括开始和结束值
​
​
# 方法一
import random
import string
def f():
    num = string.ascii_letters + string.digits
    l=[]
    for i in range(6):
        a=random.choice(num)
        l.append(a)
    print(''.join(l))
f()
​
# 方法二
import random
import string
def verify():
    num = string.ascii_letters + string.digits
    return ''.join(random.sample(num,6))
print(verify())

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

import random
import string
def verify():
    num =string.ascii_letters+string.digits
    return ''.join(random.sample(num,6))
​
import hashlib
def encode():
    value = verify()
    md5 = hashlib.md5()
    md5.update(value.encode('utf-8'))
    print(md5.hexdigest())
​
if __name__ == '__main__':
    encode()

os模块

os模块提供了多数操作系统的功能接口函数。

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

os模块中常见的方法:

import os
print(os.getcwd())          # 获取当前执行命令所在目录 I:\代码\dcs\lesson
print(os.path.isfile('I:\代码\dcs\lesson'))       # 判断是否为文件
print(os.path.isdir('I:\代码\dcs\lesson'))        # 判断是否是目录
print(os.path.exists('I:\代码\dcs\lesson'))       # 判断文件或目录是否存在
print(os.listdir('I:\代码\dcs\lesson'))           # 列出指定目录下的目录或文件
print(os.path.split('I:\代码\dcs\lesson'))        # 分割文件名与目录
print(os.path.join('I:\代码\dcs','lesson'))       # 连接目录与文件名或目录
os.mkdir(r'I:\代码\dcs\lesson\aa')                # 创建一个目录
os.rename(r'I:\代码\dcs\lesson\aa',r'I:\代码\dcs\lesson\bb') # 更改目录名称
"""
1. 导入模块os
2. 使用模块内功能
"""
import os

# 1. rename(): 重命名
os.rename('1.txt', '10.txt')

# 2. remove(): 删除文件
os.remove('10.txt')

# 3. mkdir():创建文件夹
os.mkdir('aa')

# 4.rmdir(): 删除文件夹
os.rmdir('aa')

# 5. getcwd(): 返回当前文件所在目录路径
print(os.getcwd())

# 6. chdir():改变目录路径
os.mkdir('aa')
# 需求:在aa里面创建bb文件夹: 1. 切换目录到aa,2创建bb
os.mkdir('bb')

os.chdir('aa')
os.mkdir('bb')

# 7. listdir(): 获取某个文件夹下所有文件,返回一个列表
print(os.listdir())
print(os.listdir('aa'))

# 8. rename() -- 重命名文件夹  bb重命名为bbbb
os.rename('bb', 'bbbb')

# 需求1:把code文件夹所有文件重命名 Python_xxxx
# 需求2: 删除Python_ 重命名:1, 构造条件的数据 2. 书写if
import os

# 构造条件的数据
flag = 2

# 1. 找到所有文件: 获取code文件夹的目录列表 -- listdir()
file_list = os.listdir()
print(file_list)

# 2. 构造名字
for i in file_list:
    if flag == 1:
        # new_name = 'Python_' + 原文件i
        new_name = 'Python_' + i
    elif flag == 2:
        # 删除前缀
        num = len('Python_')
        new_name = i[num:]
# 3. 重命名
    os.rename(i, new_name)

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都是 正整数

re模块相关函数

1、match 从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错

注意:如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次

str1 = re.match('\d','5f8g76g07h07h08g7968k657')                # 结果为5
str1 = re.match('\d','f8g76g07h07h08g7968k657')                 # 报错  没有这个属性组:'NoneType' object has no attribute 'group'
str1 = re.match('\d*','546f8g76g07h07h08g7968k657')             # 546f8
str1 = re.match('\d+','546f8g76g07h07h08g7968k657')             # 546
str1 = re.match('\d?','54687607?h07h08g7968k657')               # 5
str1 = re.match('\d{4}','5464567f8g76g07h07h08g7968k657')       # 5464
str1 = re.match('\d{2,5}','544g6876k0707087968k657')            # 544
str1 = re.match('^5\d{2,5}','523g446f8g76g07h07h08g7968k657')   # 523
str1 = re.match('^2\D{1,3}','2abc2546f8g76g07h07h08g7968k657')  # 2abc
str1 = re.match('^2\D{2,5}$','2abce')                           # 2abce
str1 = re.match('^2\d{2,5}$','21233')                           # 21233
str1 = re.match('^1[3859][1358]\d{8}$','15366668888')
str1 = re.match('^1[389][1358]\d{8}$','15366668888')            # 报错 
str1 = re.match('^1[0-9][0-9]\d{8}$','15366668888')
str1 = re.match('^1[a-z][A-Z]\d{8}$','1aZ66688888')
​
print(str1.group())     # group()返回类型为字符串,表示返回整个匹配对象作为一个字符串

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

import re
​
str1 = re.search('\d','k546f8g76g07h07h08g7968k657')     # 5  前面是字母也可以匹配
str1 = re.search('\d+','546f8g76g07h07h08g7968k657')     # 546
str1 = re.search('\d+','f546f8g76g07h07h08g7968k657')    # 546
str1 = re.search('\d*','546f8g76g07h07h08g7968k657')     # 546str1 = re.search('\d','akjonfelnl')     # 546
​
print(str1.group())

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

import re
​
str1 = re.findall('\d','a546f8g76g07h07h08g7968k657')    # ['5', '4', '6', '8', '7', '6', '0', '7', '0', '7', '0', '8', '7', '9', '6', '8', '6', '5', '7']
​
str1 = re.findall('\d+','a546f8g76g07h07h08g7968k657')   # ['546', '8', '76', '07', '07', '08', '7968', '657']
str1 = re.findall('\D+','a546f8g76g07h07h08g7968k657')   # ['a', 'f', 'g', 'g', 'h', 'h', 'g', 'k']
​
str1 = re.findall('zhuwei','a546f8gzhuwei76g07h07h08g7968k657')    # ['zhuwei']
​
str1 = re.findall('dcs(.+)dcs','dcs123abcdcs')                     # ['123abc']
​
str1 = re.findall('"value":"(.+)"','"value":"_abc123456"')         # ['_abc123456']
​
str1 = re.findall('"(.+)":"_abc123456"','"value":"_abc123456"')    # ['value']
​
str1 = re.findall('python','abc123')                               #[]

print(str1)

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

import re
str1 = re.compile('python')
str2 = str1.findall('122pythonpython')
print(str2)

 (.* 贪婪匹配、.*?非贪婪匹配)

import re

.*?  非贪婪匹配
str1 = re.findall('dcs(.*?)abc','dcs123abcdcs9999dcs123abcdcs999dcs123abcdcs999dcs123abcdcs')
print(str1)           # ['123', '9999dcs123', '999dcs123', '999dcs123']

.* 贪婪匹配
str1 = re.findall('dcs(.*)abc','dcs123abcdcs9999dcs123abcdcs999dcs123abcdcs999dcs123abcdcs')
print(str1)           # ['123abcdcs9999dcs123abcdcs999dcs123abcdcs999dcs123']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值