博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-模块
阅读量:7002 次
发布时间:2019-06-27

本文共 11731 字,大约阅读时间需要 39 分钟。

import导入模块

 

1.定义:用来从逻辑上组织python代码(变量,函数,类,逻辑),本质就是.py结尾的python文件,实现一个功能包:python package 用来从逻辑上组织模块  本质就是一个目录(必须带有一个__init__.py的文件)2.导入方法: import moduleimport module1,module2   导入多个模块from module import *   导入所有  慎用from module  import  logger as logger_sunhao   创建别名from module import m1,m2,m33.import模块本质(路径搜索和搜索路径)就是把python文件解释一遍 (import test ==> test = test.py all code)导入包的本质就是执行该包下的__init__文件import module ---> module.py ----> module.py的路径---》sys.path4.导入优化:from module_test import test5.模块的分类:1.标准库time与datetime2.开源模块3.自定义模块

 

 

 

time&datetime 时间模块

 在Python中,通常有这几种方式来表示时间:1.时间戳 2.格式化的时间字符串 3.元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。

元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:

 

1 # -*-coding:utf-8-*- 2 import time 3 print(time.time())  #获取一个时间戳 从1970年开始按秒计时的一个浮点型数值 4 print(time.localtime()) #返回一个struct_time元组类型序列 里面元素包含年,月,日等九个元素 5 print(time.timezone)  #返回一个值 单位为秒  6 print(time.asctime())  #返回当前时间字符串格式 7 time.sleep(2) #睡眠几秒 8  9 time.gmtime()  #把时间戳转换成元组,但是时间是UTC时间10 time.gmtime(time.time()-86640)  #把UTC时间转换成当地时间11 print(time.localtime())  #把时间戳转换成元组,但是时间是当地时间  结果为UTC+8时区

 

x=time.localtime() print(x.tm_year)  #获取年 print(x.tm_mon)   #获取月  print(time.mktime(x)) #元组转换成时间戳 time.strftime("%Y-%m-%d  %H:%M:%S",time.localtime())  #元组转换成格式化字符串时间  time.strptime('2017-10-17','%Y-%m-%d')  #把格式化字符串转换成元组

 

%a    本地(locale)简化星期名称    %A    本地完整星期名称    %b    本地简化月份名称    %B    本地完整月份名称    %c    本地相应的日期和时间表示    %d    一个月中的第几天(01 - 31)    %H    一天中的第几个小时(24小时制,00 - 23)    %I    第几个小时(12小时制,01 - 12)    %j    一年中的第几天(001 - 366)    %m    月份(01 - 12)    %M    分钟数(00 - 59)    %p    本地am或者pm的相应符    一    %S    秒(01 - 61)    二    %U    一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。    三    %w    一个星期中的第几天(0 - 6,0是星期天)    三    %W    和%U基本相同,不同的是%W以星期一为一个星期的开始。    %x    本地相应日期    %X    本地相应时间    %y    去掉世纪的年份(00 - 99)    %Y    完整的年份    %Z    时区的名字(如果不存在为空字符)    %%    ‘%’字符

 

 

 

import datetime # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925#print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19# print(datetime.datetime.now() )# print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天# print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分  ## c_time  = datetime.datetime.now()# print(c_time.replace(minute=3,hour=2)) #时间替换

 

random模块

import randomprint (random.random())  #0.6445010863311293  #random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 print (random.randint(1,7)) #4#random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。# 其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b print (random.randrange(1,10)) #5#random.randrange的函数原型为:random.randrange([start], stop[, step]),# 从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),# 结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。# random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。 print(random.choice('liukuni')) #i #random.choice从序列中获取一个随机元素。# 其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。# 这里要说明一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。# list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章。# 下面是使用choice的一些例子:print(random.choice("学习Python"))#学print(random.choice(["JGood","is","a","handsome","boy"]))  #Listprint(random.choice(("Tuple","List","Dict")))   #List print(random.sample([1,2,3,4,5],3))    #[1, 2, 5]#random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。

 

import randomimport string#随机整数:print( random.randint(0,99))  #70 #随机选取0到100间的偶数:print(random.randrange(0, 101, 2)) #4 #随机浮点数:print( random.random()) #0.2746445568079129print(random.uniform(1, 10)) #9.887001463194844 #随机字符:print(random.choice('abcdefg&#%^*f')) #f #多个字符中选取特定数量的字符:print(random.sample('abcdefghij',3)) #['f', 'h', 'd'] #随机选取字符串:print( random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )) #apple #洗牌#items = [1,2,3,4,5,6,7]print(items) #[1, 2, 3, 4, 5, 6, 7]random.shuffle(items)print(items) #[1, 4, 7, 2, 5, 3, 6]

 

验证码功能

import randomcheck_code=''for i in range(5):    current=random.randrange(0,5)    if current==i:        tmp=chr(random.randrange(65,90))    else:        tmp=random.randint(0,9)    check_code+=str(tmp)print(check_code)

 

 OS模块

 

import osos.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cdos.curdir  返回当前目录: ('.')os.pardir  获取当前目录的父目录字符串名:('..')os.makedirs('dirname1/dirname2')    可生成多层递归目录os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirnameos.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirnameos.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印os.remove()  删除一个文件os.rename("oldname","newname")  重命名文件/目录os.stat('path/filename')  获取文件/目录信息os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"os.pathsep    输出用于分割文件路径的字符串os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'os.system("bash command")  运行shell命令,直接显示os.environ  获取系统环境变量os.path.abspath(path)  返回path规范化的绝对路径os.path.split(path)  将path分割成目录和文件名二元组返回os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素os.path.exists(path)  如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path)  如果path是绝对路径,返回Trueos.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回Falseos.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回Falseos.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间

 

sys模块

 

sys.argv           命令行参数List,第一个元素是程序本身路径sys.exit(n)        退出程序,正常退出时exit(0)sys.version        获取Python解释程序的版本信息sys.maxint         最大的Int值sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值sys.platform       返回操作系统平台名称sys.stdin          输入相关sys.stdout         输出相关sys.stderror       错误相关

 

 shutil模块

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

 

#将文件内容拷贝到另一个文件中shutil.copyfileobj(fsrc,fdst,length)
f1=open('old.xml','r')f2=open('new.xml','w')shutil.copyfileobj(f1,f2)
shutil.copyfile(src,dst)  #拷贝文件shutil.copyfile('f1_old.log','f2_new.log')
shutil.copymode(src, dst)  #仅拷贝权限。内容、组、用户均不变shutil.copymode('f1.log', 'f2.log')
shutil.copystat(src, dst)  #仅拷贝状态的信息,包括:mode bits, atime, mtime, flags  src,dst文件都必须存在shutil.copystat('f1.log', 'f2.log')
shutil.copy(src, dst)  #拷贝文件和权限shutil.copy('f1.log', 'f2.log')
shutil.copy2(src, dst) #拷贝文件和状态信息
shutil.copytree(src, dst, symlinks=False, ignore=None) #递归的去拷贝文件夹shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
shutil.rmtree(path[, ignore_errors[, onerror]]) #递归的去删除文件shutil.rmtree('folder1')
shutil.move(src, dst)  #递归的去移动文件,它类似mv命令,其实就是重命名。

 

shutil.make_archive(base_name, format,...)# 创建压缩包并返回文件路径,例如:zip、tar# 创建压缩包并返回文件路径,例如:zip、tar# base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,# 如:www                        =>保存至当前路径# 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/# format:    压缩包种类,“zip”, “tar”, “bztar”,“gztar”# root_dir:    要压缩的文件夹路径(默认当前目录)# owner:    用户,默认当前用户# group:    组,默认当前组# logger:    用于记录日志,通常是logging.Logger对象#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录 import shutilret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')    #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录import shutilret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

 

 shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

 

import zipfile# 压缩z = zipfile.ZipFile('laxi.zip', 'w')z.write('a.log')z.write('data.data')z.close()# 解压z = zipfile.ZipFile('laxi.zip', 'r')z.extractall()z.close()zipfile解压缩import tarfile# 压缩tar = tarfile.open('your.tar','w')tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log')tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log')tar.close()# 解压tar = tarfile.open('your.tar','r')tar.extractall()  # 可设置解压地址tar.close()tarfile解压缩

 

 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' '(?P
...)' 分组匹配 re.search("(?P
[0-9]{4})(?P
[0-9]{2})(?P
[0-9]{4})","371481199306143242").groupdict("city") 结果{
'province': '3714', 'city': '81', 'birthday': '1993'} 

最常用的匹配语法

re.match   # 只从开头开始匹配 re.search  # 从整个文本匹配 返回一个对象  这个对象调用group()方法 查看 re.findall    # 把所有匹配到的字符放到以列表中的元素返回    #返回所有满足匹配条件的结果,放在列表里re.splitall   # 以匹配到的字符当做列表分隔符re.sub       # 匹配字符并替换  ret = re.sub('a..a','skmb','hasascascasda') print(ret) re.splite
obj = re.compile('\.com')    #编译方法  先把要匹配的字符串编译成一个对象  ret = obj.findall('asdasd.comasdas') print(ret)
 

hashlib模块

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

 

import hashlib,hmacm1=hashlib.md5()m1.update(b"hello")print(m1.hexdigest())m1.update(b"it is me")  #更新 第二次update是与第一次update拼接起来print(m1.hexdigest())m2=hashlib.md5()m2.update(b"helloit is me")print(m2.hexdigest())s1=hashlib.sha1()s1.update(b"hello")print(s1.hexdigest())s1.update(b"it is me")print(s1.hexdigest())s2=hashlib.sha1()s2.update(b"helloit is me")print(s2.hexdigest())m3=hashlib.md5()m3.update("天王盖地虎".encode(encoding="utf-8"))print(m3.hexdigest())h=hmac.new("你是二百五".encode(encoding='utf-8'))print(h.hexdigest())

 

paramiko模块

 

该模块基于SSH用于连接远程服务器并执行相关操作

 

SSHClient

 

用于连接远程服务器并执行基本命令

 

基于用户名密码连接:

 

# -*-coding:utf-8-*-# Author:sunhaoimport paramikossh= paramiko.SSHClient()   #创建ssh对象# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#连接服务器ssh.connect(hostname='192.168.10.141',port=22,username='root',password='123456')#执行命令stdin,stdout,stderr=ssh.exec_command("ps aux  ")#获取命令结果result=stdout.read()print(result.decode())#关闭链接ssh.close()

 

基于ssh秘钥连接 

 

# -*-coding:utf-8-*-# Author:sunhaoimport  paramikoprivate_key = paramiko.RSAKey.from_private_key_file('id_rsa')    #这是192.168.10.141上的私钥ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostname='192.168.10.180',port=22,username='root',pkey=private_key)  #192.168.10.141上的公钥在10.180上放着stdin,stdout,stderr=ssh.exec_command("netstat -lpn;df -h;ps aux |grep ssh")#获取命令结果result=stdout.read()print(result.decode())#关闭链接ssh.close()

 

 

SFTPClient

用于连接远程服务器并执行上传下载

# -*-coding:utf-8-*-# Author:sunhaoimport paramikotransport=paramiko.Transport('192.168.10.141',22)     #远程服务器为192.168.10.141transport.connect(username='root',password='123456')sftp = paramiko.SFTPClient.from_transport(transport)# 将本地paramiko模块-ssh.py 上传至服务器 /tmp/paramiko模块#sftp.put('paramiko模块-ssh.py', '/home/paramiko模块')# 将服务器/tmp/zabbix_server.log 下载到本地sftp.get('/tmp/zabbix_server.log', 'zabbix_server.log')transport.close()

 

转载于:https://www.cnblogs.com/sunhao96/p/7698843.html

你可能感兴趣的文章
DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
查看>>
2016"百度之星" - 资格赛(Astar Round1)
查看>>
批量修改横断面图高程范围
查看>>
洛谷3763:[TJOI2017]DNA——题解
查看>>
线性同余方程组
查看>>
oracle报ORA-00911:invalid character
查看>>
Java高并发程序设计学习笔记(八):NIO和AIO
查看>>
java javax.annotation.Resource注解的详解
查看>>
lombok 介绍及基本使用方法
查看>>
mybatis的if标签判断子类属性-There is no getter for property named 'export' in
查看>>
static变量和方法
查看>>
Linux使用笔记
查看>>
过度自信是创业者的通行证
查看>>
关键字和保留字
查看>>
Springboot 图标更换
查看>>
混淆篇之数组的常用方法总结
查看>>
我的Android第二章:Android目录结构
查看>>
互补滤波原理
查看>>
[转] C++虚函数与虚函数表
查看>>
Django-分页
查看>>