Python模块
subprocess子进程模块
import subprocess
#Popen方法是用来执行系统命令的,直接把结果打印到终端了
res =subprocess.Popen(r'dir',shell=True,
#r'dsfsdfr',shell=True,
# stdin= #标准输入(不常用)
stdout=subprocess.PIPE,#stdout 标准输出
stderr=subprocess.PIPE) #stderr 标准错误
# 拿到的是‘gbk’编码的结果,
这个命令可能有正确结果,也可能有错误结果
print(res.stdout.read().decode('gbk'))
print('========')
print(res.stdout.read().decode('gbk')) #说明只能读一次
print(res.stderr.read().decode('gbk')) #如果是错误的就会提示
json和pickle
json,有点:所有语言通用;缺点:只能序列化基本的数据类型 list/dict/int..
pickle,有点:python中所有的东西都能被他序列化;缺点:序列化内容只有python认识
json
序列化,将python的值转换为json格式的字符串
json.dumps()
反序列化,将json格式的字符串转换为python的数据类型
json.loads()
字典或列表中如有中文,序列化时想要保留中文显示
v = {'k1':'哈哈'}
val = json.dumps(v,ensure_ascii=False)
安装第三方模块:
pip install 包名
三类模块:
内置模块
第三方模块
自定义模块
sys
python解释器相关的数据
sys.path 默认python去导入模块时,会按照sys.path中的路劲挨个查找
sys.path.append('D:\\')
sys.stdout.write('你好') 标准输出
\r 回到当前行的起始位置
sys.getrefcount(a) 获取一个值得应用计数
sys.getrecursionlimit() python默认支持的递归数量
sys.exit(0) 程序终止
sys.argv
shutil
让用户执行脚本传入要删除的文件路径,在内部帮助将目录删除
import sys
import shutil
path = sys.argv[1] #路径
shutil.rmtree(path)
shutil.rmtree('test') 删除一个目录
shutil.move('oldname','newname') 重命名
shutil.make_archive('zzh','zip','要压缩的文件') 压缩文件
shutil.unpack_archive('zzh.zip',extrac_dir='解压目录',format='zip') 解压文件
if not os.path.exists('code'):
os.makedirs('code')
shutil.make_archive(os.path.join('code',ctime),'zip','D:\python')
file_path = os.path.join('code',ctime) + 'zip'
shutil.unpack_archive(file_path,r'D:\x1','zip')
模块导入
import os,sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
sys.path.append(BASE_DIR)
os
和操作系统相关的
os.path.exists(path) 如果path存在;返回True;否则返回False
os.stat('filename或者路劲').st_size 获取文件字节大小
os.path.abspath(‘路劲’) 获取一个文件的绝对路径
os.path.dirname(‘name’) 获取文件的上级目录
os.path.join('data','bin') 路劲的拼接
os.listdir 查看一个没目录下所有的文件,第一层
os.walk 查看一个目录下所有的文件,所有层
os.mkdir 创建目录(一级)
os.makedirs 创建目录(多级)
os.rename(''old'',''new'') 文件夹重命名
file_path = r'dddd\xxxx\oo.txt' #创建目录
file_folder = os.path.dirname(file_path)
if not os.path.exists(file_folder):
os.makedirs(file_folder)
r
v = r"zzcc\nyy" 把\转义掉,没有换行了
getpass
密码密文
v = getpass.getpass('Please Input Password:')
hashlib
MD5加密
def get_md5(pwd):
obj =hashlib.md5('asd'.encode"utf-8") #加盐
obj.update(pwd.encode"utf-8") #明文
result = obj.hexigest() #密文
return result
random
random.choice(['1','2','3']) #随机选出一个字符串
random.random() #随机浮点数
random.uniform(1,10) #1到10随机浮点数
random.randint(0,99) #0到99之间随机一个,范围随机
random.randrange(0,100,2) #0到100之间随机整数
random.choice('jfoiewh9838') #随机选出1个字符
random.sample('f4ji2332d4',3) #随机选出3个字符
a = [1,2,3,4]
random.shuffle(a) #洗牌
datatime&time
from datetime import datetime
ctime = datetime.now().strftime('%Y-%m-%d %H-%M-%S') 当前时间
print (ctime)
ctime.strftime("%Y-%m-%d %H:%M:%S") 转时间,可以字符串格式,后加时间格式
字符串转datetime,可以进行时间加减
v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
v2 = v1 + timedelta(days=140) #v1加上140天,还可写(hours=20)小时
datetime.utcnow() 当前UTC时间
import time,datetime
a = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print(a)
2019-05-28 20:47:09
paramiko
连接Linux
ssh = parmiko.SSHClient()#创建实例对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#调用方法,标识没有远程机器的公钥,允许连接
ssh.connect('IP','port','user','passwd')#连接远程主机
sudin,stdout,stder = ssh.exec_command('命令')#stdout命令执行后的结果,stder错误信息
OUT = stdout.readlinex()需要read函数来读取
for i in OUT:
print(i)
ssh.close()
logging模块
logging.basicConfig(**kwargs)函数用于调整日志级别,输出格式
import logging
logging.basicConfig(filename='日志.txt',
format="%(asctime)s %(name)s %(levelname)s %(module)s: %(message)s",
datefmt='%Y-%m-%d %H:%M:%S')
import traceback
def func():
try:
a = a + 1
except Exception as e:
mas = traceback.format_exc()
logging.error(mas)
func()
logging.info("info_msg")
logging.warning("warning_msg")
logging.error("error_msg")
logging.critical("critical_msg")
%(asctime)s 将日志的时间构造成,默认情况下是精准到毫秒
%(name)s 所使用的日志器名称,默认是‘root’,因为默认使用的是rootLogger
%(module) 调用日志输出函数的模块名,filename的名称不符,不包含后缀即不包含文件后缀的文件名
自定义日志