python 模块知识

sys模块

sys模块主要是用于对python解释器相关操作

  • sys.argv #命令行参数List,第一个元素是程序本身路径
  • sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
  • sys.modules.keys() #返回所有已经导入的模块列表
  • sys.modules #返回系统导入的模块字段,key是模块名,value是模块
  • sys.exc_info() #获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息
  • sys.exit(n) #退出程序,正常退出时exit(0)
  • sys.hexversion #获取Python解释程序的版本值,16进制格式如:0x020403F0
  • sys.version #获取Python解释程序的版本信息
  • sys.platform #返回操作系统平台名称
  • sys.maxint # 最大的Int值
  • sys.stdout #标准输出
  • sys.stdout.write(‘aaa‘) #标准输出内容
  • sys.stdout.writelines() #无换行输出
  • sys.stdin #标准输入
  • sys.stdin.read() #输入一行
  • sys.stderr #错误输出
  • sys.exc_clear() #用来清除当前线程所出现的当前的或最近的错误信息
  • sys.exec_prefix #返回平台独立的python文件安装的位置
  • sys.byteorder #本地字节规则的指示器,big-endian平台的值是‘big‘,little-endian平台的值是‘little‘
  • sys.copyright #记录python版权相关的东西
  • sys.api_version #解释器的C的API版本
  • sys.version_info #‘final‘表示最终,也有‘candidate‘表示候选,表示版本级别,是否有后继的发行
  • sys.getdefaultencoding() #返回当前你所用的默认的字符编码格式
  • sys.getfilesystemencoding() #返回将Unicode文件名转换成系统文件名的编码的名字
  • sys.builtin_module_names #Python解释器导入的内建模块列表
  • sys.executable #Python解释程序路径
  • sys.getwindowsversion() #获取Windows的版本
  • sys.stdin.readline() #从标准输入读一行,sys.stdout.write(a) 屏幕输出a
  • sys.setdefaultencoding(name) #用来设置当前默认的字符编码(详细使用参考文档)
  • sys.displayhook(value) #如果value非空,这个函数会把他输出到sys.stdout(详细使用参考文档)
sys.arg 获取位置参数
print(sys.argv)

执行该脚本,加参数的打印结果
python3 m_sys.py  1 2 3 4 5

[‘m_sys.py‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘]
可以发现 sys.arg返回的是整个位置参数,类似于shell的$0 $1...
sys.exit(n) 程序退出,n是退出是返回的对象
sys.version 获取python版本
>>> sys.version
‘3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]‘
sys.path 返回模块的搜索路径列表,可通过添加自定义路径,来添加自定义模块
>>> sys.path
[‘‘, ‘/Library/Frameworks/Python.framework/Versions/3.5/lib/python35.zip‘, ‘/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5‘, ‘/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin‘, ‘/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload‘, ‘/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages‘]

sys.platform 返回当前系统平台 linux平台返回linux,windows平台返回win32,MAC返回darwin
>>> sys.platform
‘darwin
sys.stdout.write() 输出内容
>>> sys.stdout.write(‘asd‘)
asd3
>>> sys.stdout.write(‘asd‘)
asd3
>>> sys.stdout.write(‘as‘)
as2
常用
import sys
import time

def view_bar(num,total):

    rate = num / total
    rate_num =  int(rate * 100)
    #r = ’\r %d%%’ %(rate_num)

    # \r后面的内容会覆盖前面的内容
    r = '\r%s>%d%%' % ('=' * rate_num, rate_num,)
    sys.stdout.write(r)
    sys.stdout.flush

def my(num):
    r='\r%s>%d%%'%('='*num,num)
    sys.stdout.write(r)
    # python的stdout是有缓冲区的
    sys.stdout.flush
    # 可以用在网络程序中多线程程序,多个线程后台运行,同时要能在屏幕上实时看到输出信息

if __name__ == '__main__':
    for i in range(0, 101):
        time.sleep(0.1)
        # view_bar(i, 100)
        my(i)
进度条实例

 os模块

 OS模块是Python标准库中的一个用于访问操作系统功能的模块,使用OS模块中提供的接口,可以实现跨平台访问

 

  • os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
  • os.chdir(dirname) 改变当前脚本工作目录;相当于shell下cd
  • os.curdir 返回当前目录: (‘.‘)
  • os.pardir 获取当前目录的父目录字符串名:(‘..‘)
  • os.makedirs(‘dir1/dir2‘) 可生成多层递归目录
  • os.removedirs(‘dirname1‘) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
  • os.mkdir(‘dirname‘) 生成单级目录;相当于shell中mkdir dirname
  • os.rmdir(‘dirname‘) 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
  • os.listdir(‘dirname‘) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
  • os.remove() 删除一个文件
  • os.rename(oldname,new) 重命名文件/目录
  • 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不存在,返回False
  • os.path.lexists  #路径存在则返回True,路径损坏也返回True
  • os.path.isabs(path) 如果path是绝对路径,返回True
  • os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
  • os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
  • os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
  • os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
  • os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
  • os.path.commonprefix(list) #返回list(多个路径)中,所有path共有的最长的路径。
  • os.path.expanduser(path)  #把path中包含的"~"和"~user"转换成用户目录
  • os.path.expandvars(path)  #根据环境变量的值替换path中包含的”$name”和”${name}”
  • os.access(‘pathfile‘,os.W_OK) 检验文件权限模式,输出True,False
  • os.chmod(‘pathfile‘,os.W_OK) 改变文件权限模式

 

hashlib模块

 

算法介绍

 

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

 

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

 

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

 

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

import hashlib
md5=hashlib.md5()
md5.update(b'oo')
print(type(b'oo'))  #<class 'bytes'>
print(md5.hexdigest())  #e47ca7a09cf6781e29634502345930a7
# 加盐操作
md5.update(b'salt')
print(md5.hexdigest())  #fd3f76d5103af3dace15273d754bdb7b

# 注意最后的结果和md5.update(b'ooaslt')是相同的

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似。

SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

 

时间模块

处理django中时间http://www.cnblogs.com/iiiiiher/p/9981817.html

表示时间的三种方式

在Python中,通常有这三种方式来表示时间:时间戳、时间对象(struct_time)和格式化的时间字符串。

时间戳

时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。

我们运行“type(time.time())”,返回的是float类型。

一般可以把时间戳理解为计算机读懂的时间。

时间对象

一个内置的struct_time对象。

struct_time元组共有9个元素共下图九个元素:

索引(Index)属性(Attribute)值(Values)
0 tm_year(年) 比如2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 60
6 tm_wday(weekday) 0 - 6(0表示周一)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为0

时间对象是我们能够理解和操作的时间。

格式化的时间字符串

格式化的时间字符串(Format String)首先,它是一个字符串。

这个字符串是按照固定的格式的,这个格式按如下格式:

 格式化时间的占位符

 

我们先导入time模块,快速认识一下python中表示时间的几种格式:

复制代码
# 导入时间模块
import time

# 时间戳
print(time.time())  # 1500875844.800804

# 时间字符串
print(time.strftime("%Y-%m-%d %X"))  # '2017-07-24 13:54:37'
print(time.strftime("%Y-%m-%d %H-%M-%S"))  # '2017-07-24 13-55-04'

# struct_time:localtime方法将一个时间戳转换为当前时区的struct_time格式
time.localtime()
# time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=13, tm_min=59, tm_sec=37, tm_wday=0, tm_yday=205, tm_isdst=0)
复制代码

 

小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;struct_time则是用来操作时间的。

几种方式之间的转换

import time
print(time.time())

print(time.strftime('%Y-%m-%d %X'))
print(time.strftime('%Y-%m-%d %H-%M-%S'))
# 时间对象
print(time.localtime())

# 时间戳->结构化时间(时间对象)
print(time.gmtime(1500000000))      #UTC时间
print(time.localtime(1500000000))   #当地时间,北京时间,跟UTC时间相差八小时
print(time.localtime())

# 时间对象->时间戳
time_tuple=time.localtime(1500000000)
print(time.mktime(time_tuple))

# 时间对象->字符串时间
print(time.strftime('%Y-%m-%d %X'))
print(time.strftime('%Y-%m-%d %X',time.localtime(1500000000)))

# 字符串时间->时间对象
# time.strptime(时间字符串,字符串对应格式)
print(time.strptime('2017-03-16','%Y-%m-%d'))
print(time.strptime('3/16/2017','%m/%d/%Y'))

print(time.ctime())
print(time.strftime('%Y-%m-%d %X'))

# datetime模块
# 时间加减
import datetime
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分钟
ctime=datetime.datetime.now()
print(ctime.replace(hour=18,minute=15)) #时间替换
相互之间的转换

最常用的表示当前时间的print(time.strftime('%Y-%m-%d %H-%M-%S'))

random模块

import random
# 随机小数
# (0,1)之间的小数
print(random.random())
#(1,6)之间的小数
print(random.uniform(1,6))

# 随机整数
# [1,6]之间的整数
print(random.randint(1,6))
# [1,10)之间步长为3的整数
print(random.randrange(1,10,3))

# 随机选择一个返回
print(random.choices([5,[9,4]]))

# 随机选择多个返回,返回的个数为函数的第二个参数
print('*'*20)
print(random.sample([1,5,6,8,7,[1,6,5],{'K':'v'}],3))

# 打乱列表顺序
item=[1,2,3,4,5,6,7]
print(item)
random.shuffle(item)
print(item)

# 练习生成随机验证码
def code():
    my_code=''
    for i in range(5):
        # 生成[0,9]随机整数
        num=random.randint(0,9)
        # 生成[65, 90]随机整数,转换为对应ASCII字符 大写A-Z
        alf=chr(random.randint(65,90))
        # 从前两者之间选择一个,注意结果是列表
        add=random.choices([num,alf])
        my_code=''.join([my_code,str(add[0])])
        # my_code=my_code+str(add[0])
    return my_code
print('code',code())

 JSON模块

dump(),dumps(),load(),loads().

dumps()和loads()已经比较熟悉了。

dump和load的方法会多一个步骤,dump是把序列化后的字符串写到一个文件中还需要传入一个fp参数,而 load是从文件中读取数据。

paramiko模块

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。

1、下载安装

1
pip3 install paramiko

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
 
# 下载安装 pycrypto
wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz
tar -xvf pycrypto-2.6.1.tar.gz
cd pycrypto-2.6.1
python setup.py build
python setup.py install
 
# 进入python环境,导入Crypto检查是否安装成功
 
# 下载安装 paramiko
wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz
tar -xvf paramiko-1.10.1.tar.gz
cd paramiko-1.10.1
python setup.py build
python setup.py install
 
# 进入python环境,导入paramiko检查是否安装成功

2、使用模块

 

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.108', 22, '帐户名', '密码')
stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
ssh.close();

执行命令 - 通过用户名和密码连接服务器
执行命令 - 通过用户名和密码连接服务器
import paramiko

private_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('主机名 ', 端口, '用户名', key)

stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
ssh.close()

执行命令 - 过密钥链接服务器
通过秘钥连接服务器
import os,sys
import paramiko

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',password='123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test.py','/tmp/test.py') 
t.close()


import os,sys
import paramiko

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',password='123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test.py','/tmp/test2.py')
t.close()

上传或者下载文件 - 通过用户名和密码
上传或者下载文件 - 通过用户名和密码
import paramiko

pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test3.py','/tmp/test3.py') 

t.close()

import paramiko

pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test3.py','/tmp/test4.py') 

t.close()

上传或下载文件 - 通过密钥
通过秘钥

 

getpass模块

getpass.getpass()

 

subprocess模块

subprocess.run('shell命令',shell=True)

 

posted @ 2019-01-05 11:24  平常心u  阅读(221)  评论(0编辑  收藏  举报