【python基础知识】常用模块学习

本文介绍了Python基础知识中的常用模块,包括时间模块、random模块、os模块、sys模块、shutil模块、json & pickle模块、helve模块、PyYAML模块、ConfigParser模块、hashlib模块、hmac模块和re模块。详细讲解了各模块的主要功能和使用方法,如时间模块的时间转换、random模块的随机数生成、os模块的文件操作、sys模块的系统信息获取、shutil模块的文件复制与移动等,帮助读者掌握Python基础模块的运用。
摘要由CSDN通过智能技术生成

【python基础知识】常用模块学习

1.定义:

**1)模块:****用来从逻辑上组织python代码(变量,函数,类,逻辑)本质就是去实现一个功能。py结尾的python文件(文件名test.py,对应的模块名就是test)

**2)包:**本质就是一个目录(必须带有一个____init____.py文件),是用来从逻辑上组织模块的。

2.导入方法:

1.导入模块

注意:需要导入多个模块时需要用逗号隔开。

#导模块
1    import module_01
2    from module_01 import *#如果想加入对应的东西只需要填写对应的名字就可以
#导包
1    import 包的名字
2    from. import test

这里有两种导入模块的方法但是第二种不常用,因为第二种里面的全部模块全部导入过来(把模块所有内容拿进来运行,在调用时容易被覆盖),当然可以解决覆盖问题。

from module_01 import say as say_01

def say():
    print("在++++++++++")
say()
say_01()

这里是main中的写法,将另一个文件中的say函数更名为say_01重新开始调用。

2.导入包的本质就是解析包里面的–init–文件


上述均来自同级目录下的导入,接下来学习一下在不同等级下的导入方法。

导入时一定需要找到文件的路径

import module--------->module.py--------->module.py的路径--------->sys.path这个模块中定义的搜索路径的方法(这里通过一级一级的返回上一层获取到路径)

所以导入包的过程就只是在导入模块过程前加入一条对init文件的解析

init----->test1 = ‘test1.py 文件里的所有代码’,所以在使用时还是一样的使用test.来调用对应的内容

3.import的本质(理解路径搜索)

将模块中所有的代码赋值一个变量(文件名)

所以在调用时用 文件名.变量 文件名.方法名

本质都是把py文件解释一遍。

4.导入优化:

用上述提高的from方法来优化后面调用的代码!

#import module_01

#import module_01
from module_01 import say
#把module_01中的代码提前拿来运行,这样可以提高下面的调用效率
def f1():
#module_01.say()
	say()
    print("in the f1")

def f2():
    say()
    print("in the f2")

这里f1,f2中重复调用module_01的say函数,重复次数多了效率非常低,这里我们可以用from这样的导入方法,让这个模块的代码提前运行一次,这样在后面的使用中就可以不用再去访问文件了

5.模块的分类:

a:标准库模块

b:开源模块

c:自定义模块

标注库:

1).时间模块

这里有个三角关系图,

在这里插入图片描述
这里的图没写完整,复习的时候注意,这里有连个方法是相互对应的彼此可以相互转换。

strftime(“格式”,struct_time)------------>“格式化得字符串”

strptime(“格式化得字符串”,“格式”)----------------->struct_time

2)random模块

random.random()(随机0-1之间的浮点数)

random.randint(1,3)(随机1-3之间的浮点数)

random.range(0,3)(顾头不顾尾,包含前面不包含最后面的)

random.chice(“hello”) (在字符串中随机去出一个)

random.sample(“hello”,2)(在字符串中随机的取出两位返回)

random.uniform(5-9)(可以指定区间,进行随机的任务)

random.shuffle() (完成洗牌的功能!将列表打乱)

3)os模块

os.getcwd() 获取当前的操作目录

os.chair() 切换到上一级路径

os.pardir() 上两次目录

os.makedirs(r“c:\a\b\c\d”)创建新的目录

os.removedirs(r"c:"\a\b\c\d")因为全部为空所以全部删除清理空文件夹的

太多了放个截图吧,

在这里插入图片描述

4)sys模块

直接放图吧,因为我是看视频学习的,为了方便自己复习,自己在pycharm上训练的乱了就直接截个图。

在这里插入图片描述

5)shutil模块

高级的 文件、文件夹、压缩包 处理模块

**shutil.copyfileobj(fsrc, fdst[, length])**将文件内容拷贝到另一个文件中,可以部分内容

**shutil.copyfile(src, dst)**拷贝文件

**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)**递归的去拷贝文件

**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对象

6)json & pickle 模块

用于序列化的两个模块

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

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

在这里插入图片描述

7)helve 模块

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

import shelve
 
d = shelve.open('shelve_test') #打开一个文件
 
class Test(object):
    def __init__(self,n):
        self.n = n
 
t = Test(123) 
t2 = Test(123334)
 
name = ["alex","rain","test"]
d["test"] = name #持久化列表
d["t1"] = t      #持久化类
d["t2"] = t2
 
d.close()
xml处理模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

8)PyYAML模块

偷偷地找到别人的博客来学习!用到的时候再来学习,

Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块。

参考文档:http://pyyaml.org/wiki/PyYAMLDocumentation

9)ConfigParser模块

用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。

例如,文档为

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[bitbucket.org]
User = hg 
[topsecret.server.com]
Port = 50022
ForwardX11 = no

写的过程:

import configparser
 
config = 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 parser
topsecret['ForwardX11'] = 'no'  # same here
config['DEFAULT']['ForwardX11'] = 'yes'
with open('example.ini', 'w') as configfile:
   config.write(configfile)

当然写完了还可以读出来(这里其实很简单,只是分出来了好几部):

>>> import configparser
>>> config = configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read('example.ini')
['example.ini']
>>> config.sections()
['bitbucket.org', 'topsecret.server.com']
>>> 'bitbucket.org' in config
True
>>> 'bytebong.com' in config
False
>>> config['bitbucket.org']['User']
'hg'
>>> config['DEFAULT']['Compression']
'yes'
>>> topsecret = config['topsecret.server.com']
>>> topsecret['ForwardX11']
'no'
>>> topsecret['Port']
'50022'
>>> for key in config['bitbucket.org']: print(key)
...
user
compressionlevel
serveraliveinterval
compression
forwardx11
>>> config['bitbucket.org']['ForwardX11']
'yes'

增删改查:

[section1]
k1 = v1
k2:v2
  
[section2]
k1 = v1
 
import ConfigParser
  
config = ConfigParser.ConfigParser()
config.read('i.cfg')
  
########## 读 ##########
secs = config.sections()
print secs
options = config.options('group2')
print options
  
item_list = config.items('group2')
print item_list
  
val = config.get('group1','key')
val = config.getint('group1','key')
  ########## 改写 ##########
sec = config.remove_section('group1')
config.write(open('i.cfg', "w"))
 
sec = config.has_section('wupeiqi')
sec = config.add_section('wupeiqi')
config.write(open('i.cfg', "w"))
   
config.set('group2','k1',11111)
config.write(open('i.cfg', "w"))
  
config.remove_option('group2','age')
config.write(open('i.cfg', "w"))

10)hashlib模块

用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

11)hmac 模块

它内部对我们创建 key 和 内容 再进行处理然后再加密

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

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

import hmac
h = hmac.new(b'12345', '宝塔镇河妖'.encode(encoding="utf-8"))
print(h.hexdigest())

12)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'

反斜杠问题,注意有这个匹配问题,不用纠结(以后学吧,现在可能还有很多听不懂)。

cCD").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’


反斜杠问题,注意有这个匹配问题,不用纠结(以后学吧,现在可能还有很多听不懂)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值