11、Python标准模块

一、time模块

在python中,时间的表示有三种方式:时间戳表示,元组的表示和格式化表示,先来看一下这三种时间表示方法在python中的语法。

1、时间戳表示法:

import  time
print(time.time()) #时间戳表示 执行结果1517984732.4657302

要想获得系统的时间戳直接调用time模块的time函数就好了,那么这一坨1517984732.4657302是个什么玩意呢?不要方,我们来换算一下,我们将这个值换算成年也就是:1517984732.4657302/(60*60*24*365)约等于48年,用2018-1970=48。实际上,时间戳就是用当前时间减去1970然后再把这个单位换算成秒得来的。

2、元组表示法:

1 import  time
2 print(time.gmtime(),time.localtime())#gmtime()为UTC时间,localtime()为本地时间
3 time_01 = time.localtime()
4 print(time_01.tm_year,time_01.tm_mon,time_01.tm_mday) #取出年月日

这2个方法都需要传递一个时间戳的参数,如果未传默认用系统的时间戳,返回的是一个元组,time.struct_time(tm_year=2018, tm_mon=2, tm_mday=7, tm_hour=14, tm_min=45, tm_sec=26, tm_wday=2, tm_yday=38, tm_isdst=0)。

3、格式化表示法:

很多时候我们希望时间能够展示成我们自己想要定义的格式,这时候就要用到格式化的表示方式。

1 import  time
2 print(time.strftime("%Y-%m-%d %H:%M:%S")) #默认格式化系统当前时间 2018-02-07 14:57:50
3 print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(45454545))) #传入了一个tuple时间进行格式化 1971-06-11 10:15:45

学习了这三种时间的表示方法,我们用一个图来描述这三种表示法之间的相互转换。

二、datetime模块(待补充)

1 import  datetime
2 print(datetime.datetime.now()) #系统当前日期
3 print(datetime.datetime.now()+datetime.timedelta(3,hours=10)) #后三天,10小时的时间

三、random模块

random模块用法如下:

 1 import random
 2 print(random.random()) #在区间[0,1)之间随机取值
 3 help(random.choices) #help函数可以查看具体函数、模块等用法
 4 print(random.randint(1,3)) #在区间[1,3]之间随机取整数
 5 print(random.randrange(1,10,2)) #在区间[1,10,2)之间取随机整数
 6 print(random.choice("123456azsxdsq"),random.choice([1,2,3,4,5])) #从字符串或列表中随机抽取元素
 7 print(random.uniform(1,2))#在区间[1,2)之间的随机小数
 8 print(random.choices("12ddsds",k=2)) #从字符串中随机返回2个字符
 9 x = [1,2,3,4,5,6,7,8]
10 random.shuffle(x)#打乱顺序

利用random模块生成验证码:

 1 def gernateVerCodeEx(size=4):
 2     code = ‘‘
 3     for i in range(size):
 4         current = random.randint(0,size-1)
 5         if i == current:
 6             code += str(random.randint(0,9))
 7         elif random.randint(0,size)%2 == 0:
 8             code += chr(random.randint(65,90))
 9         else:
10             code += chr(random.randint(97,121))
11     return code
12 print(gernateVerCodeEx(4))

四、OS模块

提供对操作系统进行调用的接口

 1 import os
 2 os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径
 3 os.chdir("F:/")  #改变当前脚本工作目录;相当于shell下cd
 4 os.curdir  #返回当前目录: (‘.‘)
 5 os.pardir  #获取当前目录的父目录字符串名:(‘..‘)
 6 os.makedirs(‘F:/a/b/c‘)    #可生成多层递归目录
 7 os.removedirs(‘test/a‘)    #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
 8 os.mkdir(‘dirname‘)    #生成单级目录;相当于shell中mkdir dirname
 9 os.rmdir(‘dirname‘)    #删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
10 print(os.listdir("F:/python_learn"))    #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
11 os.mkdir("test/a")
12 os.remove("test/a/11")  #删除一个文件
13 os.rename("OS_learn.py","os_learn.py")  #重命名文件/目录
14 os.stat(‘os_learn.py‘)  #获取文件/目录信息
15 os.sep    #输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
16 os.linesep    #输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
17 os.pathsep    #输出用于分割文件路径的字符串
18 os.name    #输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
19 os.system("ipconfig")  #运行shell命令,直接显示
20 os.environ #获取系统环境变量
21 os.path.abspath("F:/python_learn")  #返回path规范化的绝对路径
22 os.path.split("a/c/c")  #将path分割成目录和文件名二元组返回
23 os.path.dirname("F:/python_learn")  #返回path的目录。其实就是os.path.split(path)的第一个元素
24 os.path.basename("F:/python_learn")  #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
25 os.path.exists("F:/python_learn") #如果path存在,返回True;如果path不存在,返回False
26 os.path.isabs("/s")  #如果path是绝对路径,返回True
27 os.path.isfile("F:/python_learn") #  如果path是一个存在的文件,返回True。否则返回False
28 os.path.isdir("F:/python_learn")  #如果path是一个存在的目录,则返回True。否则返回False
29 os.path.join("F:\\","a","\\b") #  #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
30 os.path.getatime("F:/python_learn") #返回path所指向的文件或者目录的最后存取时间
31 os.path.getmtime("F:/python_learn")  #返回path所指向的文件或者目录的最后修改时间

五、sys模块

 1 # -*- coding:utf-8 -*-
 2 import sys
 3 sys.argv           #命令行参数List,第一个元素是程序本身路径
 4 sys.exit(0)        #退出程序,正常退出时exit(0)
 5 sys.version        #获取Python解释程序的版本信息
 6 sys.maxsize         #最大的Int值
 7 sys.path          #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
 8 sys.platform       #返回操作系统平台名称
 9 sys.stdout.write(‘please:‘)
10 val = sys.stdin.readline()[:-1]
11 print(val)

六、shutil模块

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

 1 # -*- coding:utf-8 -*-
 2 import shutil
 3 with open("test_01","r") as fsrc,open("test_02","w") as fdst:
 4     shutil.copyfileobj(fsrc, fdst) #将test_01的文件内容拷贝到test_02中
 5 shutil.copyfile("test_01","test_02") #文件拷贝
 6 shutil.copy("test_01","test_02") #拷贝文件和权限
 7 shutil.copytree("F:/python_learn","F:/a") #递归拷贝
 8 shutil.rmtree("F:/a") #递归删除目录
 9 shutil.move("F:/test.txt","F:/software") #递归移动文件
10 shutil.make_archive("F:/a/python_learn_new", "zip", "F:/python_learn")  # 压缩文件
11 shutil.unpack_archive("F:/a/python_learn_new.zip","F:/a","zip") #解压文件

七、shelve模块

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

 1 # -*- coding:utf-8 -*-
 2 import shelve
 3 info = {‘name‘:‘高文祥‘,‘age‘:18}
 4 def getAddress():
 5     return "上海"
 6 contract = {"address":getAddress,"QQ":"258469451","phone":"1585555555555"}
 7 with shelve.open(‘shelve_test‘) as f:#打开一个文件
 8     f["info"] = info
 9     f["contract"] = contract #持久化数据
10 with shelve.open(‘shelve_test‘) as f:
11     info_01 = f["info"]
12     info_02 = f["contract"] #读取数据
13     print(info_01["name"], info_02["address"]())

讲到shelve,我们来学习一下2个序列号的方法json和pickle。

json序列化的代码如下:

 1 info = {‘name‘:‘高文祥‘,‘age‘:18}
 2 def getAddress(name):
 3     return "上海"+name
 4 contract = {"address":getAddress,"QQ":"258469451","phone":"1585555555555"}
 5 import  json
 6 with open("json_01.txt","w",encoding="utf-8") as file:
 7     json.dump(info,file) #序列化存入文件  json.dumps(info)只序列化不存入文件
 8     json.dump(contract,file) #执行报错 json无法序列化函数TypeError: Object of type ‘function‘ is not JSON serializable
 9
10 with open("json_01.txt","r",encoding="utf-8") as file:
11     info_json = json.load(file)  #反序列化 json.load() 只反序列化 不存入文件
12     print(info_json["name"])

pickle序列化代码如下:

import  pickle
info = {‘name‘:‘高文祥‘,‘age‘:18}
def getAddress(name):
    return "上海"+name
contract = {"address":getAddress,"QQ":"258469451","phone":"1585555555555"}
stuNo = [1,2,3,4,5]
with open("pickle_01.txt","wb") as file:
    pickle.dump(contract,file) #第1次dump
    pickle.dump(info, file)#第2次dump
    pickle.dump(stuNo,file)#第3次dump
with open("pickle_01.txt","rb") as file:
    print(pickle.load(file))#执行结果{‘address‘: <function getAddress at 0x0085F5D0>, ‘QQ‘: ‘258469451‘, ‘phone‘: ‘1585555555555‘}
    print(pickle.load(file))#执行结果{‘name‘: ‘高文祥‘, ‘age‘: 18}
    print(pickle.load(file))#执行结果[1, 2, 3, 4, 5]

下面我们对shelve,json和pickle实现文件持久化功能作一个总结:

1、json只能序列化简单的数据类型,不能序列化函数,而shelve和pickle可以

2、shelve主要用将数据进行文件持久化时,非常好用

3、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。

4、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。

5、如果想把一个字符串转换为数据类型可以使用eval函数

八、configparser模块

    用于生成和修改常见配置文档,下面就有configparser来生成一个配置文件,代码如下:

 1 import configparser
 2 config = configparser.ConfigParser()
 3 config["DEFAULT"] = {‘ServerAliveInterval‘: ‘45‘,
 4                      ‘Compression‘: ‘yes‘,
 5                      ‘CompressionLevel‘: ‘9‘}
 6 config[‘bitbucket.org‘] = {}
 7 config[‘bitbucket.org‘][‘User‘] = ‘hg‘
 8 config[‘topsecret.server.com‘] = {}
 9 topsecret = config[‘topsecret.server.com‘]
10 topsecret[‘Host Port‘] = ‘50022‘  # mutates the parser
11 topsecret[‘ForwardX11‘] = ‘no‘  # same here
12 config[‘DEFAULT‘][‘ForwardX11‘] = ‘yes‘
13 with open(‘example.ini‘, ‘w‘) as configfile:
14     config.write(configfile)

其实本质上就是一个字典,下面我们来读取一下这个配置文件的内容:

1 import configparser
2 config = configparser.ConfigParser()
3 config.read("example.ini") #先读配置文件
4 # print(config.sections())
5 # print(config.default_section)
6 default  = config.default_section
7 print(default)
8 print(‘ServerAliveInterval= %s\nCompressionLevel=%s ForwardX11=%s‘
9       %(config[default][‘ServerAliveInterval‘],config[default][‘CompressionLevel‘],config[default][‘ForwardX11‘]))

上面就是配置文件的读取,各位大神在写代码的时候可以使用配置文件配置一些参数。

九、logging模块

 1 # -*- coding:utf-8 -*-
 2 import logging
 3 logging.basicConfig(filename=‘12.log‘,
 4                     format=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s‘,
 5                     datefmt=‘%Y-%m-%d %H:%M:%S %p‘,
 6                     level=10)
 7 #help(logging)
 8 #%(asctime)s:表示datefmt的值    %(name)s:表示root %(levelname)s:表示bug的等级(debug,info,warning,error,critical,log)
 9 #%(module)s:模块名称  %(message)s‘ 日志信息
10 logging.debug(u‘打印debug信息‘)
11 logging.info(‘打印info信息‘)
12 logging.warning(‘打印warning信息‘)
13 logging.error(‘打印error信息‘)
14 logging.critical(‘打印critical信息‘)
15 logging.log(10,‘log日志‘)

十、re模块

用于正则表达式

 1 ‘.‘     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
 2 ‘^‘     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
 3 ‘$‘     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
 4 ‘*‘     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为[‘abb‘, ‘ab‘, ‘a‘]
 5 ‘+‘     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[‘ab‘, ‘abb‘]
 6 ‘?‘     匹配前一个字符1次或0次
 7 ‘{m}‘   匹配前一个字符m次
 8 ‘{n,m}‘ 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果‘abb‘, ‘ab‘, ‘abb‘]
 9 ‘|‘     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果‘ABC‘
10 ‘(...)‘ 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
11
12
13 ‘\A‘    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
14 ‘\Z‘    匹配字符结尾,同$
15 ‘\d‘    匹配数字0-9
16 ‘\D‘    匹配非数字
17 ‘\w‘    匹配[A-Za-z0-9]
18 ‘\W‘    匹配非[A-Za-z0-9]
19 ‘s‘     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 ‘\t‘
20 [^a]    表示不包含a
21 ‘(?P<name>...)‘ 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{‘province‘: ‘3714‘, ‘city‘: ‘81‘, ‘birthday‘: ‘1993‘}

下面看一下正则表达式的几个栗子:

 1 import re
 2 re.match(".","hello123") #匹配一个字符h
 3 re.match("\d","hello123") #匹配不到 以为match只从开头开始匹配字符串开头是h不是数字
 4 re.search("\d","hello123")#可以匹配 search方法会从每个位置开始匹配 匹配1
 5 re.search("[0-9]{1,3}","1212edddsds121wedw12wewd1ww2weew2") #执行结果<_sre.SRE_Match object; span=(0, 3), match=‘121‘>
 6 re.findall("[0-9]{1,3}","1212edddsds121wedw12wewd1ww2weew2") #执行结果[‘121‘, ‘2‘, ‘121‘, ‘12‘, ‘1‘, ‘2‘, ‘2‘]
 7 #search方法只匹配一个,findall会匹配所有
 8 re.split(":","id:123:name:hello") #分割
 9 re.sub("\d+","#","123fghjlfs12lll33$$") #替换
10 #下面来个实际的列子 1、找出所有150开头的手机号码
11 info = "18001452550ghsldllsa454115800513051,23443,15021487541fsafdafdsfa"
12 print(re.findall("150[0-9]{8}",info)) #执行结果[‘15021487541‘]

十一、hashlib模块和 hmac模块

主要用于加密

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())

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

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

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

1 import hmac
2 h = hmac.new(‘天王盖地虎‘.encode("utf-8"), ‘宝塔镇河妖‘.encode("utf-8"))
3 print(h.hexdigest())

我了个擦,重要写完模块这一节,累哥了!

原文地址:https://www.cnblogs.com/win0211/p/8427824.html

时间: 2024-10-07 05:13:16

11、Python标准模块的相关文章

Python标准模块--logging(转载)

转载地址:http://www.cnblogs.com/zhbzz2007/p/5943685.html#undefined Python标准模块--logging 1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息: print将所有信息都输出到标准输出中,严重影响开发者从

python标准模块(下)

Python 系统标准模块(shutil.logging.shelve.configparser.subprocess.xml.yaml.自定义模块) 目录: shutil logging模块 shelve configparser subprocess xml处理 yaml处理 自定义模块 一,系统标准模块: 1.shutil:是一种高层次的文件操作工具,类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好,是高级的文件.文件夹.压缩包处理模块,而且是系统的标准自带模块

(python) 标准模块sys和os的使用

一.sys模块 包含了系统的相关的功能.我们来学习sys.argv,它包含命令行参数. 例子:定义了一个add函数,用来实现两个整数的相加. #! coding=utf-8 # usersys.py import sys def add(a,b): print a+b print sys.argv if len(sys.argv)<2: print "argv is lower 2" else: if sys.argv[1].startswith("-") a

Python标准模块--Iterators和Generators

1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然,我们也会了解如何创建它们,在我们需要的时候,就可以创建属于我们自己的迭代器和生成器. 2 模块使用 2.1 迭代器 迭代器是一个允许你在一个容器上进行迭代的对象.Python的迭代器主要通过两个方法实现:__iter__和__next__.__iter__要求你的容器支持迭代.它会返回迭代器对象本

python标准模块(time、datetime及hashlib模块)

一.time,datetime模块 时间相关的操作 1 import time 2 time.sleep(5) # ==> 停顿多少秒 3 print(time.time()) # ==> 返回时间戳,1970年1月1日之后的秒,seconds 4 print(time.ctime()) # ==> 返回字符串形式当前时区的当前时间 5 print(time.ctime(time.time()-86400)) # ==>时间换算,当前系统时间提前一天 6 print(time.gm

【翻译】Python标准模块库之-------Subprocess

原文来自官网文档:https://docs.python.org/2.7/ 17.1. subprocess — Subprocess management New in version 2.4. The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends

Python标准模块--asyncio

1 模块简介 asyncio模块作为一个临时的库,在Python 3.4版本中加入.这意味着,asyncio模块可能做不到向后兼容甚至在后续的Python版本中被删除.根据Python官方文档,asyncio通过coroutines.sockets和其它资源上的多路复用IO访问.运行网络客户端和服务端以及其它相关的原始服务等提供了一种单线程并发应用的架构.本文并不能覆盖所有关于asyncio模块的技术点,但是你可以学到如何去使用这个模块,以及为什么它是有用的. 如果你在一些较老的Python版本

python标准模块--os

目录 1.介绍2.常用函数 1.介绍 os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行. 2.常用函数 需要使用的时候自查,掌握20%即可 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd:得到当前工作目录,

python 标准模块之json 模块

模块作用 json 通常用于在web 客户端和服务器数据交换,即把字符串类型转换成python 基本数据类型 ,或者将python 基本数据类型转换成字符串类型 常用的方法 json.dumps(obj) # 将python 的基本数据类型转换成字符串 json.loads(obj) # 将字符串序列化成python 的基本数据类型 json.dump(obj) # 将python 的基本数据类型转换成字符串并写入到文件当中 json.load(obj) # 读取文件中的字符串,序列化成pyth