python之模块(代码片段)

author author     2022-11-29     566

关键词:

模块即一推代码的集合来实现某个功能,使用时直接调用,甚是方便。

模块又分为三种

  • 自定义模块
  • 内置模块
  • 第三方模块

下面就来介绍介绍什么是内置模块及如何去使用它和内置模块的好处。

使用模块模块前首先导入该模块,才能调用到该模块的功能。导入方法

import 模块名字

先来模块介绍常用的模块

time模块

 和时间相关的操作,常见几种表现方式

time.time()时间戳
time.gmtime()结构化时间
time.localtime()本地时间
time.strftime()字符串时间
time.ctime()
time.mktime()

常见输出的格式化占位符

技术分享
%Y  表示年
%m 表示月范围 [01,12].
%d  表示天范围 [01,31].
%H  表示小时范围 [00,23].
%M 表示分钟范围 [00,59].
%S  表示秒范围 [00,61].
格式化占位符

 random模块

生成随机数的模块。

常见几种方法

import random

print(random.random())
print(random.randint(1, 2))#左右都包括
print(random.randrange(1, 10))#包左不包右

最常见的例子就是生成随机验证码

技术分享
import random
temp = ‘‘
for i in range(4):
    add_num = random.choice([random.randrange(0,10),chr(random.randrange(65,91))])
    temp += str(add_num)
print(temp)
第一种
技术分享
import random
temp = ""
for i in range(4):
    num = random.randrange(0,4)
    if num == 3 or num == 1:
        li = random.randrange(0,10)
        temp = temp + str(li)
    else:
        rad = random.randrange(65,91)
        c = chr(rad)
        temp += c
print(temp)
第二种

sys模块

主要公共是提供对python解释器的操作

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称
sys.stdin          输入相关
sys.stdout         输出相关
sys.stderror       错误相关

os模块 

用于提供系统级别的操作

os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
os.curdir                   返回当前目录: (‘.‘)
os.pardir                   获取当前目录的父目录字符串名:(‘..‘)
os.makedirs(‘dir1/dir2‘)    可生成多层递归目录
os.removedirs(‘dirname1‘)   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(‘dirname‘)         生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname‘)         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(‘dirname‘)       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()                 删除一个文件
os.rename("oldname","new")  重命名文件/目录
os.stat(‘path/filename‘)    获取文件/目录信息
os.sep                      操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep                  当前平台使用的行终止符,win下为"\r\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不存在,返回False
os.path.isabs(path)         如果path是绝对路径,返回True
os.path.isfile(path)        如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)         如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)      返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)      返回path所指向的文件或者目录的最后修改时间

hashlib模块

加密相关的模块

import hashlib
print(hashlib.md5())#<md5 HASH object @ 0x0000000000A61940>

m = hashlib.md5()
m.update("hello world".encode("utf8"))
print(m.hexdigest())#5eb63bbbe01eeed093cb22bb8f5acdc3
Md5加密后的结果显示

s = hashlib.sha256()
s.update("hello world".encode("utf8"))
print(s.hexdigest())#b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
加密程度更安全

sha256加密算法虽然比md5的级别程度高,但是运行速度慢

logging模块

记录日志的信息功能模块,默认有5个等级

import logging  
logging.debug(‘debug message‘)  
logging.info(‘info message‘)  
logging.warning(‘warning message‘)  
logging.error(‘error message‘)  
logging.critical(‘critical message‘) 

5种日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,所以上述只能输出三种情况 

WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message

两种打印日志的格式

技术分享
import logging  
logging.basicConfig(level=logging.DEBUG,  
                    format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s,  
                    datefmt=%a, %d %b %Y %H:%M:%S,  
                    filename=/tmp/test.log,  
                    filemode=w)  
  
logging.debug(debug message)  
logging.info(info message)  
logging.warning(warning message)  
logging.error(error message)  
logging.critical(critical message)
打印日志文本
技术分享
import logging
logger = logging.getLogger()
fh = logging.FileHandler("test.log",encoding="utf-8")
ch = logging.StreamHandler()
formatter = logging.Formatter("%(asctime)s -%(name)s - %(levelname)s - %(message)s")

fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)

logger.setLevel(logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning messing")
logging.error("error message")
logging.critical("critical message")
屏幕和日志文本中

从上述可见,参数的表示意义为(如果更改就会报错,但可以根据自己需求选择其中几个显示打印出来)

  • filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
  • filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
  • format:指定handler使用的日志显示格式。 
  • datefmt:指定日期时间格式。 
  • level:设置rootlogger(后边会讲解具体概念)的日志级别 
  • stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

对format中涉及的参数意义

  • %(name)s Logger的名字
  • %(levelno)s 数字形式的日志级别
  • %(levelname)s 文本形式的日志级别
  • %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
  • %(filename)s 调用日志输出函数的模块的文件名
  • %(module)s 调用日志输出函数的模块名
  • %(funcName)s 调用日志输出函数的函数名
  • %(lineno)d 调用日志输出函数的语句所在的代码行
  • %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
  • %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
  • %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
  • %(thread)d 线程ID。可能没有
  • %(threadName)s 线程名。可能没有
  • %(process)d 进程ID。可能没有
  • %(message)s用户输出的消息

re模块

即正则表达式。我们知道在许多代码中如果要自己查找费事还不容易对,所以我们引入了正则进行模糊匹配。之前我们学习了字符串也能进行匹配查找,但是string提供的是完全匹配。不方便查找更多元素。

正则提供一种紧凑的表示法,可用于表示字符串的组合,之所以如此强大,是因为单独的正则表达式可以表示无限数量的字符串,只要满足正则规则即可。

常见的正则的5种用途

  • 分析:识别并提取符合特定标准的的文本
  • 搜索:定位可以有不止一种形式的字符串。
  • 搜索与替代:使用一个字符串对与正则匹配的对象进行替代。
  • 字符串分割:在与正则匹配的地方对字符串进行分割。
  • 验证:检测某段文本是否符合某些功能。

 常用元字符

. ^ $ * + ? [ ] | ( ) \

. 通配符表示:能匹配一个字符re.findall("alex.f","yinfansfksdfalexfadf")
^ 尖角符表示: 只能匹配到的字符在首位re.findall("^alex","alexyinfansfksdffadf")
$ 表示:只能匹配到的字符在末尾re.findall("alex$","yinfansfksdffadfalex")
* 重复匹配表示:匹配*前一位字符0次到多次a = re.findall("alex*","alexxxx")
+ 表示:匹配+前一位字符1次到多次a = re.findall("alex*","alexxxx)
? 表示:匹配?前一位字符0次到1次a = re.findall("alex?","alexxxx)
表示:想匹配几次就几次 a = re.findall("alex3","alexxx")
       m 匹配m次
       m,n匹配m到n次
       1,表示1到正无穷大
[] 字符集表示:匹配[]里的字符中的一个re.findall("a[bc]d","wwwwacd")
       如果是[a-z]则表示匹配任意字符
       [^0-9]表示匹配非数字以外的字符
\ 表示:后边跟元字符去除特殊功能
       后边跟普通字符实现特殊功能
       引用序号对应的字组所匹配的字符串
       \d 匹配任何十进制数:相当于类 [0-9]
       \D 匹配任何非数字字符:相当于类[^0-9]
       \s 匹配任何空白字符:相当于类[\t\n\f\r\v]
       \S 匹配任何非空白字符:相当于类[^\t\n\f\r\v]
       \w 匹配任何字母数字字符:相当于类[a-zA-Z0-9]
       \W 匹配任何非字母数字字符:相当于类[^a-zA-Z0-9]
       \b 匹配一个特殊字符边界,也就是指单词和空格间的位置
()表示:做一个整体去匹配
| 表示:或的意思

常见方法

findall()所有结果都返回到一个列表里
search()返回一个对象,对象可以调用group()找到返回结果,只匹配第一个
match()只在字符串开始匹配,也只返回一个对象,用group()找到返回结果
split()分割re.split("[k,s]","djkgsal")#[‘dj‘,‘g‘,‘al‘]
sub()替换re.sub("a..b","affasff","saffbfs")
compile()#obj =re.compile("fa") 调用 obj.findall("afafsdff")

注:

  • re.I 表示对大小写不敏感
  • re.L 做本地化识别匹配
  • re.M 多行匹配,影响^ 和 $
  • re.S 使 . 匹配包括换行在内的所有字符

例如取多层运算最里层的括号的方法

import re

a = re.search("\([^()]*\)","1-2*((60-30+(-9-2-5-2*3-5/3-40*4/2-3/5+6*3)*(-9-2-2*5/3 +7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*25))").group()
print(a)

输出结果
(-9-2-5-2*3-5/3-40*4/2-3/5+6*3)

  

import re
ret = re.findall(‘(?P<name>\w2)/(?P<age>\d2)‘,"45bd/34"ab"3")

json,pickle模块

主要用于序列化

  • json     用于【字符串】和 【python基本数据类型】 间进行转换
  • pickle   用于【python特有的类型】 和 【python基本数据类型】间进行转换

 它们都提供了4个功能 dump,dumps,写入  load,loads 导出

import json
dic = "name":"flash","age":19
date = json.dumps(dic)
with open("jsosn_text","w") as f:
    f.write(date)
date = json.dumps(dic)

with open("json_text2","w") as f:
    json.dump(dic,f)


with open("jsosn_text","r") as f:
    date = json.load(f)
print(date)

xml模块  

XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下 

技术分享
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2023</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year>2026</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year>2026</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>
创建
技术分享
from xml.etree import ElementTree as ET

############ 解析方式一 ############

# 打开文件,读取XML内容
str_xml = open(‘xo.xml‘, ‘r‘).read()

# 将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(str_xml)

############ 操作 ############

# 顶层标签
print(root.tag)

# 循环所有的year节点
for node in root.iter(‘year‘):
    # 将year节点中的内容自增一
    new_year = int(node.text) + 1
    node.text = str(new_year)

    # 设置属性
    node.set(‘name‘, ‘alex‘)
    node.set(‘age‘, ‘18‘)
    # 删除属性
    del node.attrib[‘name‘]


############ 保存文件 ############
tree = ET.ElementTree(root)
tree.write("newnew.xml", encoding=‘utf-8‘)
字符串修改保存
技术分享
from xml.etree import ElementTree as ET

############ 解析方式二 ############

# 直接解析xml文件
tree = ET.parse("xo.xml")

# 获取xml文件的根节点
root = tree.getroot()

############ 操作 ############

# 顶层标签
print(root.tag)

# 循环所有的year节点
for node in root.iter(‘year‘):
    # 将year节点中的内容自增一
    new_year = int(node.text) + 1
    node.text = str(new_year)

    # 设置属性
    node.set(‘name‘, ‘alex‘)
    node.set(‘age‘, ‘18‘)
    # 删除属性
    del node.attrib[‘name‘]


############ 保存文件 ############
tree.write("newnew.xml", encoding=‘utf-8‘)

解析文件方式,修改,保存
文件修改保存
技术分享
from xml.etree import ElementTree as ET

############ 解析字符串方式打开 ############

# 打开文件,读取XML内容
str_xml = open(‘xo.xml‘, ‘r‘).read()

# 将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(str_xml)

############ 操作 ############

# 顶层标签
print(root.tag)

# 遍历data下的所有country节点
for country in root.findall(‘country‘):
    # 获取每一个country节点下rank节点的内容
    rank = int(country.find(‘rank‘).text)

    if rank > 50:
        # 删除指定country节点
        root.remove(country)

############ 保存文件 ############
tree = ET.ElementTree(root)
tree.write("newnew.xml", encoding=‘utf-8‘)
字符串删除保存
技术分享
from xml.etree import ElementTree as ET

############ 解析文件方式 ############

# 直接解析xml文件
tree = ET.parse("xo.xml")

# 获取xml文件的根节点
root = tree.getroot()

############ 操作 ############

# 顶层标签
print(root.tag)

# 遍历data下的所有country节点
for country in root.findall(‘country‘):
    # 获取每一个country节点下rank节点的内容
    rank = int(country.find(‘rank‘).text)

    if rank > 50:
        # 删除指定country节点
        root.remove(country)

############ 保存文件 ############
tree.write("newnew.xml", encoding=‘utf-8‘)
文件删除保存
技术分享
from xml.etree import ElementTree as ET


# 创建根节点
root = ET.Element("famliy")


# 创建节点大儿子
son1 = ET.Element(‘son‘, ‘name‘: ‘儿1‘)
# 创建小儿子
son2 = ET.Element(‘son‘, "name": ‘儿2‘)

# 在大儿子中创建两个孙子
grandson1 = ET.Element(‘grandson‘, ‘name‘: ‘儿11‘)
grandson2 = ET.Element(‘grandson‘, ‘name‘: ‘儿12‘)
son1.append(grandson1)
son1.append(grandson2)


# 把儿子添加到根节点中
root.append(son1)
root.append(son1)

tree = ET.ElementTree(root)
tree.write(‘oooo.xml‘,encoding=‘utf-8‘, short_empty_elements=False)
创建

 

 

 

  

 

python模块之getpass模块(代码片段)

getpass模块提供了两个函数: 1.getpass.getpass() 2.getpass.getuser()getpass模块,提示用户输入密码而不回显。getpass.getpass(prompt=‘Password:‘,stream=None)用参数‘prompt‘提示用户开始输入,默认值为"Password:"。zaiUnix上,‘prompt‘提示符会被写... 查看详情

python之platform模块(代码片段)

python之platform模块函数列表platform.system()   获取操作系统类型,windows、linux等platform.platform() 获取操作系统,Darwin-9.8.0-i386-32bitplatform.version() 获取系统版本信息6.2.0platform.mac_ver()platform.win32_ver()& 查看详情

python之random模块(代码片段)

#!/usr/bin/envpython#-*-coding:utf8-*-importrandom‘‘‘如果想要随机的内容的话,就可以使用这个模块来完成‘‘‘##############随机模块应用函数##############defv_code():‘‘‘随机验证码函数‘‘‘ret=""foriinrange(5):num=random.randint(0,9)#获取随机... 查看详情

python之kivy模块(代码片段)

1、首先关注kivy模块的安装,安装成功能够使用,需要安装几个依赖包python-mpipinstall--upgradepipwheelsetuptoolsvirtualenvpython-mpipinstalldocutilspygmentspypiwin32kivy_deps.sdl2kivy_deps.glewpython-mpipinstallkivy_deps.gstreamerpyt 查看详情

python标准库datetime之date模块详解(代码片段)

Python标准库datetime之date模块详解datetime是Python提供的操作日期和时间的标准库,主要有datetime.date模块、datetime.time模块及datetime.datetime模块。其中date模块提供了日期操作相关的方法;time模块提供了时间操作相关的方法;datetime提... 查看详情

python之sys模块(代码片段)

 #!/usr/bin/python#-*-coding:UTF-8-*-‘‘‘用于对Python解释器相关操作:sys.argv命令行参数List,第一个元素是程序本身路径sys.exit(n)退出程序,正常退出时exit(0)sys.version获取Python解释程序的版本信息sys.maxint最大的Int值sys.path返回模块... 查看详情

python之os模块(代码片段)

OS模块基本操作提供对操作系统进行调用的接口importos#导入模块os.getcwd()#获取当前目录(pwd)os.chdir("/Users")#切换到某个指定的目录(cd/Users)os.curdir#返回当前目录(‘.‘、cd.)os.pardir#返回上级目录(‘..‘、cd..)os.makedirs(‘dirname1/dirname2‘... 查看详情

python之jsonpath模块(代码片段)

使用jsonpath模块,需要pipinstalljsonpath安装即可。当遇到层级比较深的字典时,要想取值使用jsonpath取值比较方便,可以一下取到。如果取得值不存在,则返回Falseimportjsonpathd="error_code":0,"stu_info":["id":314,"name":"矿泉水","sex":"男","age":1... 查看详情

python常用模块之random模块——实现人和电脑猜拳(代码片段)

importrandomall=['石头','剪刀','布']computer=random.choice(['石头','剪刀','布'])#所有赢了的情况win=[['石头','剪刀'],['布','石头'],[& 查看详情

python常用模块之random模块——实现人和电脑猜拳(代码片段)

importrandomall=['石头','剪刀','布']computer=random.choice(['石头','剪刀','布'])#所有赢了的情况win=[['石头','剪刀'],['布','石头'],[& 查看详情

python之sys模块(代码片段)

sys模块的常见函数列表sys.argv:实现从程序外部向程序传递参数。sys.exit([arg]):程序中间的退出,arg=0为正常退出。sys.getdefaultencoding():获取系统当前编码,一般默认为ascii。sys.setdefaultencoding():设置系统默认编码,执行dir(sys)时不... 查看详情

python之初识模块二(代码片段)

os模块os模块是与系统交互的一个接口os.makedirs(‘dirname1/dirname2‘)可生成多层递归目录os.removedirs(‘dirname1‘)若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.mkdir(‘dirname‘)生成单级目录;相当于shel... 查看详情

python模块之导入包及模块发布(代码片段)

1.导入包(不常用的方法)在使用python的包时,有时候想直接导入包名,然后通过包名来调用模块,例如:temp为我们创建的一个包,如果我们想通过下面的方式进行导入模块中的方法,将会出错importtemptemp.text1.hello()现在我们在... 查看详情

python语法之模块和包(代码片段)

这一节,我将为大家介绍模块和包:模块化能够带来很多好处:(1)简化问题求解将所有代码放在一个文件中时,我们需要考虑的是整个问题的求解,代码实现的复杂度大大增加。将代码拆分放在多个文件中时,每个文件只需... 查看详情

python常用模块之sys,os(代码片段)

....sys模块     1.作用:     sys模块是与python解释器交互的一个接口  2.具体使用    1.sys.argv获取当前正在执行的命令行列表,第一个为程序本身路径print(‘filename%s‘%sys.argv[0])#打印当前文件路径    根... 查看详情

python基础之函数和模块(代码片段)

函数的基本使用函数的定义:把具有独立功能的代码块组织成一个小模块,在需要的时候调用。或者说,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数的使用:1.定义函数;2.调用函数。函数的... 查看详情

python标准库datetime之time模块详解(代码片段)

Python标准库datetime之time模块详解上一篇博文中我们学习了datetime库中的日期模块(date),本文我们来学习下时间模块(time)。传送门:点击即可跳转日期模块1、时间对象类主要处理时、分、秒操作创建对象常用的参数有(小时,分钟,秒... 查看详情

python时间序列之calendar模块(代码片段)

...用于解决日历方面的问题。中文官网地址:https://docs.python.org/zh-cn/3/library/calendar.htmlcalendar模块该模块定义了很多类型 查看详情