python常用模块

1.yagmail模块

python标准库中发送电子邮件的模块比较复杂,因此,有许多开原的库提供了更加易用的接口来发送电子邮件,其中yagmail是一个使用比较广泛的开原项目,yagmail底层依然使用了smtplib和email模块,但是yagmail提供了更好的接口,并具有更好的易读性

yagmail是开原项目,因此,在使用前需要安装

pip install yagmail

连接邮箱服务器

yag = yagmail.SMTP(user='xxx@163.com', password='xxxx', host='smtp.163.com')

发送邮件

yag.send(to='xxx@126.com', cc='xxx@163.com',subject='这是测试邮件', contents='这是测试邮件的内容')

断开连接

yag.close()

2. 时间戳

import time

start_time=time.time()

time.sleep(2)

end_time=time.time()

print(end_time-start_time)

可以计算出start_time=time.time()与end_time=time.time()之间的时间

3. configparser模块

3.1 ConfigParser简介

ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。

下面的info.txt文件内容如下

[db]

db_host = 127.0.0.1

db_port = 69

db_user = root

db_pass = root

host_port = 69

[concurrent]

thread = 10

processor = 20

括号“[ ]”内包含的为section;db_host这些为option

3.2 ConfigParser 初始化对象

使用ConfigParser 首选需要初始化实例,并读取配置文件:

import configparser

config=configparser.ConfigParser()

config.read("info.txt",encoding='gbk')

3.3 ConfigParser 常用方法

1.获取所用的section节点

print(config.sections())

['db', 'concurrent']

2.获取指定section 的options。即将配置文件某个section 内key 读取到列表中:

print(config.options('db'))

['db_host', 'db_port', 'db_user', 'db_pass', 'host_port']

3. 获取指点section下指点option的值

print(config.get('db','db_host'))

127.0.0.1

# r1 = config.getint("db", "k1") #将获取到值转换为int型

# r2 = config.getboolean("db", "k2" ) #将获取到值转换为bool型

# r3 = config.getfloat("db", "k3" ) #将获取到值转换为浮点型

4. 修改某个option的值,如果不存在则会出创建

config.set('db','db_user','admin') #修改db_user的值为admin

config.write(open('info.txt','w'))

5. 检查section或option是否存在,结果以bool的形式

print(config.has_section('db1')) #是否存在该

print(config.has_option('db','db_test')) #是否存在db的section并且有db_test的option

6.添加section 和 option

config.add_section('lzb') #添加lzb这个section

config.write(open('info.txt','w'))

config.set('lzb','name','libai') #在lzb这个section添加name=libai

config.write(open('info.txt','w'))

7. 删除section 和 option

config.remove_section('lzb') #整个lzb的section下的所有内容都将删除

config.write(open('info.txt','w'))

config.remove_option('db','db_test') #将db的section中的db_test删除

config.write(open('info.txt','w'))

8. 将section下的所有信息都列出来

print(config.items('db'))

[('db_host', '127.0.0.1'), ('db_port', '69'), ('db_user', 'admin'), ('db_pass', 'root'), ('host_port', '69')]

4. paramiko模块

安装:pip install paramiko

4.1 通过paramiko模块连接主机运行bash命令

虚拟机ip:192.168.88.10

user:root

password:123456

import paramiko

ssh=paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

cmd=input('请输入:')

ssh.connect(hostname='192.168.88.10',port=22,username='root',password='123456')

stdin,stdout,stderr = ssh.exec_command(cmd)

print(stdout.read().decode('utf-8'))

print(stderr.read().decode('utf-8'))

stdin:标准输入

stdout:标准输出

stderr:标准错误

4.2 通过paramiko模块连接主机下载

t=paramiko.Transport(('192.168.88.10',22))

t.connect(username='root',password='123456')

sftp=paramiko.SFTPClient.from_transport(t)

sftp.get(r'/root/a',r'C:Users15116Desktopa')

sftp.close()

get是将linux端的文件发送到windows端

4.3 通过paramiko模块连接主机上传

t=paramiko.Transport(('192.168.88.10',22))

t.connect(username='root',password='123456')

sftp=paramiko.SFTPClient.from_transport(t)

sftp.put(r'C:Users15116Desktoplock.txt',r'/root/lock1.txt')

sftp.close()

put是将windows端的文件发送到linux端

5. os模块

5.1 获取当前工作路径

import os

print(os.getcwd())

H:python1

5.2 改变当前工作路径

import os

print(os.getcwd())

os.chdir('H:python')

print(os.getcwd())

H:python1

H:python

5.3 返回上级目录用 ..

print(os.getcwd())

os.chdir('..')

print(os.getcwd())

H:python1

H:

5.4 建递归的目录

os.makedirs('s1/s2/s3')

os.chdir('s1/s2/s3')

print(os.getcwd())

H:python1s1s2s3

5.5 新建目录,只能建一层

os.mkdir('b1')

os.chdir('b1')

print(os.getcwd())

H:python11

5.6 只能删除单级目录为空的文件夹

os.rmdir('b1')

5.7 列出指定文件夹下面所有的文件夹和文件包括隐藏文件,以列表方式打印出来

print(os.listdir('H:python1'))

['.idea', '6.1.py', '6.1.spec', '6

3·.3homework1.py', '6.3homework2.py']

5.8 删除指定的一个文件

os.remove('b1/test.txt')

5.9 修改文件夹名字或者是文件名字都可以

os.rename('b1','b2') #将b1文件重命名为b2

5.10 查看一个文件的详细信息

print(os.stat('test.txt'))

H:pythonpython.exe H:/python1/6.5os模块.py

os.stat_result(st_mode=33206, st_ino=562949953434537, st_dev=337607633, st_nlink=1, st_uid=0, st_gid=0, st_size=4, st_atime=1559719610, st_mtime=1559719533, st_ctime=1559719523)

st_size=28 文件大小,单位是字节

st_atime=1528473600 用户上一次的访问时间

st_mtime=1528552906 用户上一次修改的时间(常用)

st_ctime=1528552713 用户的创建文件的时间

这个时间是时间戳,想要转换成我们能看懂的那种格式,还得转换下,比如用户创建文件时间是1528552713 转换为字符串时间

5.11 运行shell命令,直接显示结果

os.system('tasklist') #执行tasklist命令

res=os.system('tasklist > lock.txt') #返回的结果,0代表执行成功,非0代表不成功

print(res)

0

实例:在linux系统下

cmds = ['ls -ltr','df -h','ifconfig ens33 192.168.254.250/24']

for cmd in cmds:

res = os.system(cmd)

if res == 0:

continue

else:

break

5.12 判断路径是否存在,存在为True,不存在为False

print(os.path.exists('H:python1'))

True

5.13 判断一个文件是否存在,存在为True,否则为False

print(os.path.isfile('‪H:python1info.txt'))

5.14 判断一个目录是否存在,存在为True,否则为False

print(os.path.isdir('test.txt'))

5.15 路径拼接

a='H:python1'

b='s1ss.txt'

print(os.path.join(a,b))

H:python1s1ss.txt

5.pymysql模块:操作数据库

连接数据库之前,要确保连接的数据库的可以第三方登陆(%)

5.1 创建数据库test

import pymysql #导入模块

# 连接数据库,

db=pymysql.connect(host='192.168.88.10',user='root',password='123',port=3306)

# 使用cursor()方法获取操作游标

cur=db.cursor() # 执行sql语句

sql='create database test character set utf8;' # 输入数据库里的sql命令

db.close() #关闭db,关闭与数据库的连接

5.2 查询数据库中表的信息

import pymysql

db=pymysql.connect(host='192.168.88.10',user='root',password='123',db='mysql',port=3306)

cur=db.cursor()

sql='select host,user,password from user;'

cur.execute(sql) # 执行sql语句

results=cur.fetchall() #获取查询的所有记录

# print(results)

for i in results: # 将取出来的数据分行显示出来

print(i)

db.close()

5.4 在数据库的表中插入多行数据

import pymysql

db=pymysql.connect(host='192.168.88.10',user='root',password='123',db='test',port=3306)

cur=db.cursor()

for n in range(20):

sql='insert into students values (0,"name-%s")' % n

cur.execute(sql)

results=cur.fetchall()

db.commit() #在第三方对数据库进行增删改操作的时候,默认开启事务,因此需要进行提交操作

db.close()

6.socket模块

利用ip地址和端口号来进行通信的模块

实例1:测试22端口是否开启

import socket

ser=socket.socket()

res=ser.connect_ex(('192.168.88.10',22))

print(res)

输出结果如下:

0 # 如果22端口通返回结果为0,不通返回不为0的数字

实例2:监控多台主机

import socket

hosts=['192.168.88.5:80','192.168.88.10:22','192.168.88.12:22','192.168.88.15:22']

for host in hosts:

server=socket.socket()

server.settimeout(1) # ip通,端口不通,会循环ping,这里设置ping的时长

ip=host.split(':')[0]

port=host.split(':')[1]

res=server.connect_ex((ip,int(port)))

if res==0:

print('%s正常' % ip)

else:

print('%s不正常' % ip)

输出结果如下:

192.168.88.5不正常

192.168.88.10正常

192.168.88.12不正常

192.168.88.15不正常

原文地址:https://www.cnblogs.com/liangzb310/p/11027019.html