文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python基础学习16----模块

2023-01-30 22:21

关注

模块(Module)的引入

 

import 模块名

 

调用模块中的函数的方式为

模块名.函数名

这种方式引入会相当于将模块中代码执行一遍,所以如果引入的模块中有输出语句,那么只写import 模块名,运行也会显示输出。

若想只引入模块中的某个函数,可以使用如下方法

from 模块名 import 函数名

这样可以直接使用函数名调用函数

但是有一个问题需要注意,这样虽然只引入了所需要的函数,但是如上所说,若模块中有输出语句,依然会执行

 

搜索路径

当要引入一个模块的时候,python解释器需要对模块进行搜寻,搜寻的顺序为

1.当前目录

2.在 shell 变量 PYTHONPATH 下的每个目录。

3.默认路径,由安装过程决定的

搜索路径都存储在 system 模块的 sys.path 变量中,若我们想要寻找到我们自定义的不再当前目录的模块,那么我们可以在sys.path中

添加程序文件所在的路径。

 

import os
import sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)

 

这里__file__为当前文件所在的相对路径,通过abspath获得绝对路径,再通过dirname来去掉文件名,最终生成文件目录最高层的绝对路径并添加到

搜索路径中。

在此基础上,就可以使用以下方式引入不同包中的模块

from 包名 import 模块名

 

接下来简单介绍一下一些常用的模块

time模块

time模块常用内置函数

1.time.time()

返回当前时间的时间戳(1970纪元后经过的浮点秒数)

2.time.localtime()

格式化时间戳为本地的时间

 

import time
print(time.localtime())
#time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=16, tm_min=31, tm_sec=32, tm_wday=3, tm_yday=263, tm_isdst=0)

 

3.time.asctime()

接受格式化元组形式的时间为参数,返回一个可读形式的时间

time1=time.localtime()
print(time.asctime(time1))#Thu Sep 20 16:35:44 2018

4.time.ctime()

接受一个时间戳为参数,将其转变为可读形式的时间

print(time.ctime(time.time()))#Thu Sep 20 16:42:03 2018

5.time.strftime()

time.strftime(format,time)

接收以结构化时间元组为参数,并返回以可读字符串表示的当地时间,格式由参数format决定 

print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))#2018-09-20 16:46:30

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

6.time.sleep()

time.sleep(sec)

表示将进程挂起sec秒

 

random模块

1.random.random()

生成一个0---1的随机浮点数

2.random.uniform()

生成一个指定范围的随机浮点数

 

print(random.uniform(4,7))
print(random.uniform(7,4))

 

参数没有必要第一个小,第二个大

3.random.randint()

生成一个指定范围内的随机整数

print(random.randint(4,7))#   4<= n<=7

这里参数必须是第一个小于等于第二个参数

4.random.randrange()

生成一个指定范围内的随机整数,第三个参数为间隔

print(random.randrange(1,100,2))#1--100之间的一个随机奇数

5.random.choic()

在一个序列中随机选择一项

print(random.choice([1,3,4,7,8]))

6.random.sample()

在序列中选取规定数量的元素放到一个列表中返回

print(random.sample([1,3,4,7,8],3))#[1,4,7]

7.random.shuffle()

将序列打乱,重排

list1=[1,3,4,7,8]
random.shuffle(list1)
print(list1)

 

os模块

1.os.name

对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

print(os.name)

2.os.getcwd()

返回当前的工作目录

3.os.listdir()

将指定目录下的所有文件名返回到一个列表中,不区分目录和文件

print(os.listdir(os.getcwd()))

4.os.remove()

删除指定文件

5.os.rmdir()

删除指定目录

6.os.mkdir()

创建目录,只能建一层

7.os.makedirs()

创建目录,可以递归创建很多层

8.os.path.isfile()

判断指定对象是否为文件,是则返回True,否则返回False

9.os.path.isdir()

判断指定对象是否为目录,是则返回True,否则返回False

10.os.path.exists()

判断文件或目录是否存在

11.os.path.split()

返回路径的目录和文件名到一个元组中

12.os.chdir()

改变当前工作目录到指定的路径

13.os.path.getsize()

获得文件的大小,如果为目录则返回0

14.os.path.abspath()

返回绝对路径

15.os.path.join(path, name)

连接目录和文件名

16.os.path.basename(path)

返回文件名

17.os.path.dirname(path)

返回文件路径

18.os.sep

当前平台的路径分隔符

19.os.stat(path).st_size

返回文件字节单位的大小

 

sys模块

1.sys.argv

sys.argv列表,用于接收外部向程序传递的参数,列表第一项为当前py文件的文件名,之后的元素为传递的参数。

例如在cmd运行py文件可在其后加参数

2.sys.exit(n)

参数n为0表示正常退出,其他参数为异常,可以捕获

3.sys.path

sys.path是一个列表,存放模块的搜索路径

4.sys.platform

返回当前平台

5.sys.modules

sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法

 

hashlib模块

这里我们直接看一段代码

 

import hashlib

m=hashlib.md5()
m.update("hello world".encode("utf-8"))
print(m.hexdigest())#5eb63bbbe01eeed093cb22bb8f5acdc3

m.update("123".encode("utf-8"))
print(m.hexdigest())#46d7a9532282332f023c08fe25ff7105

n=hashlib.md5()
n.update("hello world123".encode("utf-8"))
print(n.hexdigest())#46d7a9532282332f023c08fe25ff7105

 

hashlib是用来加密的模块,上述第二个m.update就相当于在之前的字符串后边加上123,然后再次加密

除了md5加密方式还有 sha1, sha224, sha256, sha384, sha512.

 

logging模块

import logging

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

 

有五种日志记录方式,按等级依次是从低到高,输出方式是输出到屏幕

可是直接运行输出到屏幕的只有

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

原因是日志输出等级有限制,那么怎么改变等级的限制呢

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='myapp.log',
                # filemode='w'
                    )

这里通过上面的方法,level设置等级,format是输出格式化方式,datefmt为日期的输出格式,在添加了上述代码后再次运行屏幕会显示

Thu, 20 Sep 2018 19:33:50 模块.py[line:74] DEBUG debug
Thu, 20 Sep 2018 19:33:50 模块.py[line:75] INFO info
Thu, 20 Sep 2018 19:33:50 模块.py[line:76] WARNING warning
Thu, 20 Sep 2018 19:33:50 模块.py[line:77] ERROR error
Thu, 20 Sep 2018 19:33:50 模块.py[line:78] CRITICAL critical

这样就都能够显示了,那logging.basicConfig中filename和filemode是做什么的呢

当把上述注释了的两行恢复,那么这些日志就只会以文件的方式存储,不会再在屏幕中打印filename为存储的文件名,filemode为存储方式

接下来问题就来了,如果我既想在屏幕输出,又想在文件中存储怎么办?

第二个问题,如果我想根据不同的情况,类别,把日志分别存储怎么办?

import logging

logger = logging.getLogger(log_type)
logger.setLevel(log_LEVEL)

ch = logging.StreamHandler()
ch = setLevel(log_LEVEL)

fh = logging.FileHandler(log_file)
fh.setLevel(log_LEVEL)

formatter = logging.Formatter('输出格式')

ch.setFormatter(formatter)
fh.setFormatter(formatter)

logger.addHandler(ch)
logger.addHandler(fh)

logger.info("日志信息")

利用这种方式可通过getLogger建立不同的对象来管理不同的日志,同时可以根据情况来设置输出到屏幕,还是保存到文件,还是两者都是。

 

configparser模块

configparser是python用来处理配置文件的模块

首先可以使用它生成一个配置文件

 

import configparser
config=configparser.ConfigParser()
config["DEFAULT"]={"ServerAliveInterval" : 45,
                    "Compression" :"yes",
                    "CompressionLevel" : 9,
                    "ForwardX11" : "yes"}
config["bitbucket.org"]={"User" : "Tom"}
config["topsecret.com"]={"Port": 50022,
                    "ForwardX11": "no"}


with open ("example.ini","w") as configfile:
    config.write(configfile)

 

这里也可以直接使用config.read_dict(字典)来读取内容,最后生成的配置文件为

[DEFAULT]
serveraliveinterval = 45
compression = yes
compressionlevel = 9
forwardx11 = yes

[bitbucket.org]
user = Tom

[topsecret.com]
port = 50022
forwardx11 = no

接下来我们对这个配置文件进行一些增删改查的操作

config.read("example.ini")
print(config.sections())#['bitbucket.org', 'topsecret.com']

这里不会显示DEFAULT,因为它是一个特殊项

print(config.defaults())
#OrderedDict([('serveraliveinterval', '45'), ('compression', 'yes'), ('compressionlevel', '9'), ('forwardx11', 'yes')])

可以通过上述方式查看default中的内容

具体内容可以通过查看字典的方式来查看

print(config["bitbucket.org"]["user"])#Tom
print(config["DEFAULT"]["compression"])#yes

然后还有一种特殊的情况

for i in config["bitbucket.org"]:
    print(i)

一般人会认为这里输出的是bitbucket.org中的键,但其实输出的是

user
serveraliveinterval
compression
compressionlevel
forwardx11

这里还会再将DEFAULT中的键输出

删除操作

删除键值对

config.remove_option("bitbucket.org","user")
config.write(open ("example.ini","w"))

删除块section

config.remove_section("topsecret.com")
config.write(open ("example.ini","w"))

判断是否存在

print(config.has_section("bitbucket.org"))

修改

config.set("bitbucket.org","user","Jerry")
config.write(open ("example.ini","w"))

这些有改变的操作要注意最后再写入文件config.write(open ("example.ini","w"))

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯