Python——关于常见模块(长期更新)
1、在Python中,我们最常见的估计就是时间模块,所以第一个我来说一下时间模块:
import time
print(time.time()) #时间戳,从1970年8点开始的
print(time.clock()) #计算cpu的执行时间
print(time.gmtime()) #UTC时间
print(time.localtime()) #北京时间
print(time.strftime('%Y-%m-%d %H:%M:%S')) #创建时间格式
a = time.strptime('2018-11-12 21:41:32','%Y-%m-%d %H:%M:%S')
print(a.tm_year) #2018 求上面变量a所给时间的年
print(time.ctime(1)) #如果括号为空,则显示当前时间,括号里面显示的为秒数,从1970年8点开始计算
print(time.mktime(time.localtime())) #将时间戳转化为秒
关于上面所说的时间模块,那么我们有什么应用呢,在日常书写中,我们经常要给文件写时间与日期,这时候就可调用时间模块
#假设这样一个场景,如果有人打开秘密文本,则记录打开的时间,将其保存到文本中,如果打开的是公开文本,则不记录
import time
def sceret():
print('秘密文本')
def text():
print('公开文本')
def logger_one(f):
def logger_two():
f()
a = open('logger_sceret.txt','r+')
a.read()
a.write('\r\n')
print(a.write(time.strftime('%Y-%m-%d %H:%M:%S')))
a.close()
return logger_two
sceret = logger_one(sceret)
sceret()
2、接下来说以下random(随机数)模块:
import random #在Python中,如果我们要定义随机数模块
print(random.random()) #这是一个 0-1的随机数
print(random.randint(1,8)) #随机出现1——8,包含8
print(random.choice(['123',4,[1,2]])) #随机出现列表里的一个
print(random.sample(['123',4,[1,2]],2)) #随机出现列表里的两个
print(random.randrange(1,3)) #,随机出现1——3,不包含3
上面我们说了一下随机数模块,那么随机数模块在哪里应用呢,在日常生活中,我们常接受到的短信验证码就可以用随机数来做
import random
def v_code(): #定义这个随机数函数
code = '' #首先定义将要给出的验证码为空
for i in range(5):
add=random.choice([random.randrange(10),chr(random.randrange(97,123))]) #验证码为五位的小写字母和数字任意组合
code+=str(add) #每次出现的数字或字母拼接在一起
print(code)
v_code() #调用,便可出现这个随机验证码
3、接下来我们来说一下关于os模块
import os
os.getcwd()) #获取当前工作目录
os.chdir('dirname')) #改变当前脚本工作目录
os.curdir #返回当前目录
os.pardir #返回当前目录的父目字符串名录
os.makedirs('dirname1/dirname2') #生成多递归目录
os.removedirs('dirname1') #若目录为空,则删除,并递归到上一层目录,如也为空,则删除
os.mkdir('dirname') #生成单级目录
os.rmdir('dirname') #删除单级目录
os.listdir('dirname') #列出当前目录下的所有文件和子目录
os.remove() #删除一个文件
os.rename('oldname','newname') #给文件重命名
os.stat('path/filename') #获取目录/文件信息
#上面这个说一下,如果我们获取了文件信息,那么我们就要从信息中得到我们想要的
os.stat_result(st_mode=33206, st_ino=1688849860273573, st_dev=205036670, st_nlink=1, st_uid=0, st_gid=0, st_size=307, st_atime=1541679532, st_mtime=1541938638, st_ctime=1541679532)
#上面这些是我获取我自己的文件得到的信息,st_size表示文件为多少字节,st_atime表示文件最后存取时间,st_mtime表示最后修改时间
os.sep #输出操作系统特定的路径分隔符
os.linesep #输出当前平台使用的行终止符
os.pathsep #输出用于分割文件路径的字符串
os.name #输出字符串指示当前使用平台
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最后的文件名
os.path.exists(path) #如果path存在,返回Ture,反之,返回False
os.path.isabs(path) #判断path是否为绝对路径
os.path.isfile(path) #判断path是否是一个存在的文件
os.path.isdir(path) #判断path是否是一个存在的目录
os.path.join(path[,path2[,...]]) #
os.path.getatime(path) #返回path所指向的文件或目录的最后存取时间
os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间
4、接下来说一说hashlib模块
#各种加密方式的调用方法
import hashlib
hashlib.blake2b
hashlib.blake2s
hashlib.md5
hashlib.new
hashlib.pbkdf2_hmac
hashlib.sha1 #还有如同sha256等等方法
将具体的某些东西进行加密
import hashlib #所谓的加密模块
m = hashlib.md5() #可以将后面的MD5改为blake2b,sha256等等的加密算法
print(m)
m.update('hello world'.encode('utf8'))
print(m.hexdigest())
m.update('Any'.encode('utf8'))
print(m.hexdigest())
m2 = hashlib.md5()
m2.update('hello worldAny'.encode('utf8')) #因为在Python3中使用万国码进行转化,所以要转成utf8
print(m2.hexdigest())
b = hashlib.md5()
b.update('hello world Any'.encode('utf8'))
print(b.hexdigest())
5.关于sys模块
import sys #与python解释器进行交互
print(sys.argv) #命令行参数list,第一个元素是程序本身路径
print(sys.exit()) #退出程序,正常退出时exit(0)
sys.version #获取python解释程序的版本信息
sys.maxint #最大的int值
sys.path #返回模块的搜索路径,初始化时使用pythonpath环境
sys.platform #返回操作系统平台名称
6.关于re(所谓的正则表达式)模块
import re
re.findall("条件","所要查找的字符串","标志位") 一般不修改标志位
rer.search() 只找到一个就返回,取用方法为group
##2元字符
1、" . " 通配符 代指所有的字符(除了换行符\n),每次只能代指一位
ret1 = re.findall('h..o','hello world')
2、" ^ " 尖角符 只在最开始的地方匹配,后面不匹配
ret2 = re.findall('^h..o','adsahellosdf')
3、" $ " 只在最后的地方匹配,前面不匹配
ret3 = re.findall('h..o$','adsahellosdf')
4、" * " 重复前面的字符,然后进行匹配,匹配次数为零次到无穷
ret4 = re.findall('h.*o','adsahellosdf')
5、" + " 重复前面的字符,然后进行匹配,匹配次数为1到无穷
ret5 = re.findall('ab+','asdfab')
6、" ?" 只能取零次或一次
ret6 = re.findall('a?b','aaaabghabdfgb')
7、" {1,5} " 匹配几次可以自己定,默认按最大的匹配(贪婪匹配)
8、" [a,b]" 字符集(取代元字符的特殊功能[\ ^ (非)-(到)]) 中括号里的任意选一个,但是不能两个都选
尖叫号放在中括号里,意味中括号里取反
[a-z] a到z的范围都选
9、" \ " 反斜杠后边跟元字符去除特殊功能
反斜杠后边跟普通字符实现特殊功能
10、" ( ) "
11、" | " 或的关系
findall() :所有的结果都返回到一个列表里
search() :返回匹配到的第一个对象(object),对象可以调用group(),返回结果
match(): 只在字符串可是匹配,剩下与search一样
split():
sub(): 等价于replace() re.sub('\d','abc','alvin5yuan6',1)
subn(): 会告诉你替换的次数
compile() :
obj = re.compile('\d{3}')
ret = obj.search('abc123eeee')
print(ret.group())
finditer(): 生成的是一个迭代器
比如我们在日常的从网页上爬取的数据,我们要从中进行网址的选取,就可以使用这个模块
import re
ret = re.findall('www.(?:\w+).com','www.baidu.com')
print(ret)
#我们进行的查询一般都是模糊匹配,而RE模块进行查询时,一般都是贪婪匹配,即按所要选取的最大的值取
7.关于XPath表达式模块
示例代码:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
所要提取的内容:
//price/text() 会取到29.99 和39.95这两个值
//title/@lang 提取title里面lang的属性值