python基础知识5

本文深入解析Python中的各种模块,包括标准库、第三方模块和自定义模块的使用方法,以及os、sys、shutil、JSON、pickle、shelve、xml、ConfigParser、hashlib、hmac、re等模块的功能和应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块导入

1 定义
模块:用来从逻辑上组织的python代码(变量,函数,类,逻辑:实现一个功能)本质是.py结尾的Python文件,
(文件名:test.py,对应的模块名:test)
包:用来从逻辑上组织模块的,本质就一个目录(必须带有一个_init_.py文件)

2 导入方法
import moudle
多种:import modle1_name,moudle2_name,
from modle1 import *

区别:iimport moudle 在使用时 直接moudle.xxx()
from modle1 import * 调用时不能直接使用 moudle.xxx() 它相当于将代码复制
from modle import xxx as xxx_a 起一个别名

3 import本质(通过路径搜索和搜索路径
import modle 相当于 modle1 =all_code 代码定义了方法
from import m1 从代码里打开文件,把想要的方法m1单独拿出来放到当前文件来执行
导入模块的本质是把Python文件解释一遍
导入包的本质就是执行_init_.py文件
os.path.abspath(_file_找到当前目录
sys.path.dirname(os.path.abspath(file)

想要导入包,运用包中的文件方法,需要先倒入包
然后在包中的_init_文件中导入包下文件名 from . import test1 .代表相对的当前目录下
在main文件中 imoprt package_test
package_test.test1.test()

4导入优化

在同一个模块中调用其他模块相同的方法多次 用from modules_test import test 比import modules_test 效率要高

5模块的分类
1 标准库
2 开源模块 第三方模块
3 自定义模块

标准库:
time datetime
在Python中,有以下几种方式表示时间, 1)时间戳 2)格式化的时间字符 3)元组 共九个元素 Python的time模块主要调用c库
时间戳的方式,表示是从1970年1月1日 000:00:00开始按秒计算的偏移量。运行“type(time.time())”,返回的是float类型,返回时间戳的函数
主要有time(),clock()
元组方式:struct_time元组共有九个元素,返回的函数主要有 gmtime(),localtime(),strptime() dst 时区 夏令时
UTC世界协调时,格林威治天文时间在中国为UTC+8
time.time() 获取时间戳
timezone
altzone
daylight
tzname
time() clock() sleep() gmtime() 结果为UTC时区 localtime() 结果为UTC+8时区 asctime() ctime() mktime() strftime() strptime() tzset() 单位是秒
time.strftime("%Y-%m:%d %H :%M:%S “,time.localtime) strftime(“格式”, struct-time)------>格式化的字符串
strptime(“格式化的字符串”,“格式”)----->struct_time
time.strptime(‘2016-08:20 14:31:12’,”%Y-%m:%S %H:%M:%d")
x.tm_year =2015 x.tm_mon=08 x.tm_sex=20 x.tm_hour=14 x.tm_min=31 x.tm_day=12

模块详解

os模块
#提供对操作系统进行调用的接口
os.getcwd() 获取当前目录。即当前Python脚本工作的目录路径
os.chdir(‘dirname’) 改变当前脚本工作目录,相当于shell下的cd
os.curdir 返回当前目录:(’.’)
os.pardir 获取当前目录的父目录字符串名:(’…’)
os.makedirs(‘dirname1/dirname2’) 可生成多层递归目录
os.removedirs(‘dirname1’) 若目录为空,则删除并递归到上一级,如若为空则删除,以此类推
os.mkdir(‘dirname’) 生成单级目录,相当于shell中mkdir dirname
os.rmdir(‘dirname’) 删除单级空目录 若目录不为空则无法删除,报错,相当于shell中的 rmdir dirname
os.listdir('dirname) 列出指定目录下的所有文件爱你和子目录,包括隐藏文件,并以列表方式打印
os.renomve()删除一个文件
os.rename(‘oidname’,‘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.basename(path) 返回path最后的文件名,如果path以 / 或\ 结尾 那么就会返回空值,上面的第二个值
os.path.exists(path) 如果path 存在,返回true 如果path不存在,返回false
os.path.isabs(path) 如果path是绝对路径,返回true
os.path .isfile(path) 如果path是一个存在的文件返回true 否则返回true
os.path.isdir(path) 如果path是一个存在ude目录返回true
os.path.join(path1[,path2[,…]])将多个路径组合在一起后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path 所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path 所指向的文件或者目录的最后修改时间

sys模块
sys.argv 命令参数list,第一个元素是程序本身路径
sys.exit(n) 退出程序, 正常退出时exit(0)
sys,version 版本信息
sys.maxint 最大的int值
sys.path 返回模块的搜索路径,初始化使用pathon 环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write(‘please:’)
val=sys.stdin .readline()[:-1]

shutil模块
高级的 文件,文件夹,压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,可以部分内容

def copyfileobj(fsrc, fdst, length=16*1024):
    """copy data from file-like object fsrc to file-like object fdst"""
    while 1:
        buf = fsrc.read(length)
        if not buf:
            break
        fdst.write(buf)

import  shutil
 https://www.cnblogs.com/wupeiqi/articles/4963027.html
 f1= open("a1",encoding="utf-8")
 f2 =open("a2",encoding ="utf-8)
 shutil.copyfileobj(f1,f2)

shutil.copyfile(src, dst)
拷贝文件
shutil.copyfie(“a1”,“a3”)

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copy(src, dst)
拷贝文件和权限

shutil.copy2(src, dst)
拷贝文件和状态信息

shutil.ignore_patterns(patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件
copytree(source, destination, ignore=ignore_patterns(’
.pyc’, ‘tmp*’))

shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件

shutil.move(src, dst)
递归的去移动文件

shutil.make_archive(base_name, format,…)

创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www =>保存至当前路径
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象

#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive(“wwwwwwwwww”, ‘gztar’, root_dir=’/Users/wupeiqi/Downloads/test’)

#将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
import shutil
ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", ‘gztar’, root_dir=’/Users/wupeiqi/Downloads/test’)

import shutil

shutil.make_archive("shutil_achieve_test","zip","E:\PycharmProjects\pythday..")

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()

# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()

import tarfile
# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

# 解压
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可设置解压地址
tar.close()

JSON&pickle 模块
用于序列化 的两个模块
json 用于字符串和Python 数据类型间进行判断
pickle 用于Python特有的类型和Python的数据类型进进行转换
json模块提供了四个功能: dumps,dump loads, load
pickle 模块提共四个功能:dumps,dump loads, load

shelve模块
是一个简单的k v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的Python数据模式

import shelve
import datetime

d=shelve.open('shelve_test')
info ={'age':22,"job":'it'}


name =['aa','bb','cc']
d['name'] =name  #持久化列表
d["info"]=info  #持久化dict
d['date']=datetime.datetime.now()
d.close()
import shelve
import datetime

d=shelve.open('shelve_test')
#读取出来
d=shelve.open('shelve_test')
print(d.get("name"))

print(d.get("info"))

print(d.get("date"))

xml处理模块
https://www.cnblogs.com/alex3714/articles/5161349.html
ConfigParser模块
hashlib模块 
用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

import hashlib
 
m = hashlib.md5()
m.update(b"Hello")
m.update(b"It's me")
print(m.digest())
m.update(b"It's been a long time since last time we ...")
 
print(m.digest()) #2进制格式hash
print(len(m.hexdigest())) #16进制格式hash
'''
def digest(self, *args, **kwargs): # real signature unknown
    """ Return the digest value as a string of binary data. """
    pass
 
def hexdigest(self, *args, **kwargs): # real signature unknown
    """ Return the digest value as a string of hexadecimal digits. """
    pass
 
'''
import hashlib
 
# ######## md5 ########
 
hash = hashlib.md5()
hash.update('admin')
print(hash.hexdigest())
 
# ######## sha1 ########
 
hash = hashlib.sha1()
hash.update('admin')
print(hash.hexdigest())
 
# ######## sha256 ########
 
hash = hashlib.sha256()
hash.update('admin')
print(hash.hexdigest())
 
 
# ######## sha384 ########
 
hash = hashlib.sha384()
hash.update('admin')
print(hash.hexdigest())
 
# ######## sha512 ########
 
hash = hashlib.sha512()
hash.update('admin')
print(hash.hexdigest())

hmac 模块
python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密

散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;

一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。

import hmac
h = hmac.new(b"sd234", "钙元素遇到".encode(encoding="utf-8"))
print(h.digest())
print(h.hexdigest())

更多关于md5,sha1,sha256
https://www.tbs-certificates.co.uk/FAQ/en/sha256.html
re模块

'.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$'     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
'*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb', 'ab', 'a']
'+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
'?'     匹配前一个字符1次或0次
'{m}'   匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
'|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c

‘\A’ 只从字符开头匹配,re.search("\Aabc",“alexabc”) 是匹配不到的
‘\Z’ 匹配字符结尾,同$
‘\d’ 匹配数字0-9
‘\D’ 匹配非数字
‘\w’ 匹配[A-Za-z0-9]
‘\W’ 匹配非[A-Za-z0-9]
‘s’ 匹配空白字符、\t、\n、\r , re.search("\s+",“ab\tc1\n3”).group() 结果 ‘\t’
‘(?P…)’ 分组匹配 re.search("(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{4})",“371481199306143242”).groupdict(“city”) 结果{‘province’: ‘3714’, ‘city’: ‘81’, ‘birthday’: ‘1993’}

最常用的匹配语法
re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换
反斜杠的困扰
与大多数编程语言相同,正则表达式里使用"“作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\“表示。同样,匹配一个数字的”\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变’^‘和’$‘的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变’.'的行为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值