python基础学习16----模块
模块(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"))
python基础学习16----模块的更多相关文章
- python基础学习笔记——模块
自定义模块 我们今天来学习一下自定义模块(也就是私人订制),我们要自定义模块,首先就要知道什么是模块啊 一个函数封装一个功能,比如现在有一个软件,不可能将所有程序都写入一个文件,所以咱们应该分文件,组 ...
- Python 基础学习 总结篇
Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...
- python基础,函数,面向对象,模块练习
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
- python基础学习(起步)
目录 python基础学习(起步) 变量 常量 变量的内存管理 python垃圾回收机制 变量的其他赋值方式 今日编程小题 本人能力有限,若有偏颇之处请读者大大不吝赐教! 祝大家每天都在成长! pyt ...
- Python基础学习二
Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...
- python基础学习10
python基础学习 内容概要 文件内光标的移动 文件数据修改 函数简介 函数语法结构 内容详情 文件内光标的移动 with open(r'路径','r',encoding='utf8') as f: ...
- Day1 Python基础学习
一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
- Day1 Python基础学习——概述、基本数据类型、流程控制
一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
随机推荐
- Huffman树与编码
带权路径最小的二叉树称为最优二叉树或Huffman(哈夫曼树). Huffman树的构造 将节点的权值存入数组中,由数组开始构造Huffman树.初始化指针数组,指针指向含有权值的孤立节点. b = ...
- UIView动画上
主要参考:http://blog.csdn.net/huifeidexin_1/article/details/7597868 http://www.2cto.com/kf/201409/33566 ...
- 在MVC应用程序中,怎样删除上传的文件
在ASP.NET MVC应用程序中,怎样删除上传的文件. 由于上传时,真正文件是存储在应用程序某一目录,在数据库表中,只是存储其基本信息.在删除时,需要注意一下,由于没有事务可操作.Insus.NET ...
- c#FTP应用---windows iis
一.什么是FTP FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件. 二.搭建前期准备 1.首先打开控制面板找到“程序”点击打 ...
- C#图片处理类
转载來源:简书 转载作者:幻凌风 转载来源:https://www.jianshu.com/p/e1bab83e87ce using System; using System.Collections; ...
- Java虚拟机--内存模型与线程
Java虚拟机--内存模型与线程 高速缓存:处理器要与内存交互,如读取.存储运算结果,而计算机的存储设备和处理器的运算速度差异巨大,所以加入一层读写速度和处理器接近的高速缓存来作为内存和处理器之间的缓 ...
- 【Java基础】6、java中使用switch-case的用法及注意事项超全总结
1.switch-case注意事项: switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte.short.int.char.还有枚举:需要强调的是:long和Strin ...
- 了解java虚拟机—CMS回收器(8)
CMS(Concurrent Mark Sweep)回收器 它使用的是标记清除算法,同时又是一个使用多线程并行回收的垃圾回收器. CMS主要工作步骤 CMS工作时主要步骤有初始标记.并发标记.预清理. ...
- 深入理解 Java Object
Java中的Object对象为所有对象的直接或间接父对象,里面定义的几个方法容易被忽略却非常重要.以下来自Effective Java 对Object中几个关键方法的应用说明. public clas ...
- Color the ball(hdu1556)(hash)或(线段树,区间更新)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...