python常用模块

                                          
yagmail模块
 
python标准库中发送电子邮件的模块比较复杂,因此,有许多开源的库提供了更加易用的接口来发送电子邮件,其中yagmail是一个使用比较广泛的开源项目,yagmail底层依然使用smtplib和email模块,但是yagmail提供了更好的接口,并具有更好的易读性。
在使用前需要安装
pip install yagmail
import 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()
 
os模块
 
#os.system利用python帮我们调用系统命令
#res返回0就等于命令执行成功,如果不为0执行结果失败
import os
res=os.system('ipconfig')
print(res)
0
 
import os
lt=['systemctl restart httpd','ip-a','uname-r']
for i in lt:
    p=os.system(i)
    if p==0:
        print('good')
    else:
        print('bad')
 
#path.exists判断是否存在这个文件或者目录(绝对路径)
res = os.path.exists(r'a.txt')
if res:
     print('文件已存在')
else:
     os.system('dir')
 
#remove移除文件或目录(绝对路径)
os.remove('a.txt')
 
#rename重命名(绝对路径)
os.rename('lock.txt', '250.txt')
 
#path.join,拼接路径
HOME = '/etc/yum.repo.d/'
res = os.path.join(HOME,'a.txt')
print(res)
                                                           
configparse模块
 
一、ConfigParser简介
ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。

[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。紧接着section 为类似于key-value 的options 的配置内容。

二、ConfigParser 初始化对象
使用ConfigParser 首选需要初始化实例,并读取配置文件:
import configparser
config=configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')       #文件所在位置绝对路径或相对路径
config.add_section('werrtt')                                           #添加到文件的section
config.write(open(r'D:\demo\build\hao\pgp','w'))           #必须保存

三、ConfigParser 常用方法
1、获取所用的section节点
# 获取所用的section节点
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp', encoding="gb2312")
print(config.sections())
#运行结果
# ['hao', 'abc']

2、获取指定section 的options。即将配置文件某个section 内key 读取到列表中:
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')
r = config.options("hao")     #section必须存在,否则报错
print(r)
#运行结果
# ['db_host', 'db_port', 'db_user', 'db_pass', 'host_port']

3、获取指定section下指定option的值
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')
r = config.get("hao", "use")        #option与section必须存在,否则报错

# r1 = config.getint("db", "k1") #将获取到值转换为int型
# r2 = config.getboolean("db", "k2" ) #将获取到值转换为bool型
# r3 = config.getfloat("db", "k3" ) #将获取到值转换为浮点型
print(r)
#运行结果
# 127.0.0.1

4、config.items获取指定section的所用配置信息
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')
r = config.items("hao")
print(r)
#运行结果
#[('db_host', '127.0.0.1'), ('db_port', '69'), ('db_user', 'root'), ('db_pass', 'root'), ('host_port', '69')]

5、config.set修改某个option的值,如果不存在则会创建,此时section必须存在。
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')
config.set("hao", "use", "69")  #修改use的值为69
config.write(open("r'D:\demo\build\hao\pgp", "w"))

6、检查section或option是否存在,返回的是布尔值
import configparser
config = configparser.ConfigParser()
config.has_section("section") #是否存在该section
config.has_option("section", "option")  #是否存在该option

7、添加section 和 option
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')
if not config.has_section("hao"):  # 检查是否存在section
    config.add_section("default")
if not config.has_option("default", "db_host"):  # 检查是否存在该option
    config.set("default", "db_host", "1.1.1.1")
config.write(open("r'D:\demo\build\hao\pgp", "w"))

8、remove删除section 和 option
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')
config.remove_section("hao") #整个section下的所有内容都将删除
config.write(open("r'D:\demo\build\hao\pgp", "w"))

9、写入文件
以下的几行代码只是将文件内容读取到内存中,进过一系列操作之后必须写回文件,才能生效。
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')
#写回文件的方式如下:(使用configparser的write方法)
config.write(open("ini", "w"))
 
10、#config.values 查看所有section
import configparser
config = configparser.ConfigParser()
config.read(r'D:\demo\build\hao\pgp',encoding='gb2312')
res=config.values()
for i in res:
    print(i)
config.write(open(r'D:\demo\build\hao\pgp','w'))
 
paramiko模块
 
#通过paramiko模块连接主机运行bash命令,模拟ssh连接nilux虚拟主机
import  paramiko
ssh=paramiko.SSHClient()                                                   #初始化对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect(hostname='192.168.220.111',port=22,username='root',password='060910')      #连接
while True:
    stdin,stdout,stderr=ssh.exec_command(input('请输入命令:'))
    if stdout:
        print(stdout.read().decode('gb2312'))
    else:
        print(stderr.read().decode('gb2312'))
 

#通过paramiko模块连接主机上传
import paramiko
hostname = '192.168.220.111'
port = 22
username = 'root'
password = '060910'
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(r'C:\Users\Administrator\Desktop\a.txt', '/root/aa.txt')
sftp.close()

#通过paramiko模块连接主机下载
import paramiko
hostname = '192.168.220.111'
port = 22
username = 'root'
password = '060910'
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/root/aa.txt', r'C:\Users\Administrator\Desktop\bb.txt')
sftp.close()
 
socket模块
 
#linux服务器(半双工)
import socket
import subprocess
import threading
server = socket.socket()
server.bind(('', 8888))
server.listen(5)
print('等待电话.....')
conn, addr = server.accept()
print('电话来了......')
while True:
    data = conn.recv(10240)
    cmd = subprocess.Popen(data.decode('utf-8'),
                           shell=True,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE)
    stdout = cmd.stdout.read()
    stderr = cmd.stdout.read()
    conn.send(stdout + stderr)

#客户端
import socket
import threading
client = socket.socket()
client.connect(('192.168.254.24', 8888))
while True:
    info = input('===>:')
    if not info:continue
    client.send(info.encode('utf-8'))
    data = client.recv(10240)
    print(data.decode('utf-8'))
#全双工电话
#服务器端
import socket
import subprocess
import threading
server = socket.socket()
server.bind(('', 8888))
server.listen(5)
print('等待电话.....')
conn, addr = server.accept()
print('电话来了......')
def recv():
    while True:
        data = conn.recv(10240)
        print(data.decode('utf-8'))
def send():
    while True:
        data = input('===>:')
        conn.send(data.encode('utf-8'))
t1 = threading.Thread(target=recv)
t2 = threading.Thread(target=send)
t1.start()
t2.start()

#客户端
import socket
import threading
client = socket.socket()
client.connect(('localhost', 8888))
def send():
    while True:
        info = input('===>:')
        client.send(info.encode('utf-8'))
def recv():
    while True:
        data = client.recv(1024)
        print(data.decode('utf-8'))

t1 = threading.Thread(target=send)
t2 = threading.Thread(target=recv)
t1.start()
t2.start()
import socket
socket.setdefaulttimeout(1)

#利用socket 监控端口号
import  socket,re
hosts=['192.111.1.0:80','123.1.15.155:40','165.1.15.0:70','192.168.1.167:80']
for host in hosts:
    ip=re.compile('(.*?):(.*)').search(host).group(1)
    port=re.compile('(.*?):(.*)').search(host).group(2)
    server = socket.socket()
    server.settimeout(1)
    res=server.connect_ex((ip,int(port)))
    if res == 0:
        print('%s--->%s,ok' % (ip,int(port)))
    else:
        print('%s--->%s,bu ok' % (ip,int(port)))
 
re模块
 
.*?叫做非贪婪匹配,尽可能的少匹配
.*叫做贪婪匹配,尽可能的多匹配
         \w
匹配字母数字
        \W
匹配非字母数字
          \s
匹配任意空白字符,等价于 [\t\n\r\f].
         \S
匹配任意非空字符
         \d
匹配任意数字,等价于 [0-9].
         \D
匹配任意非数字
         \A
匹配字符串开始
         \Z
匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c
         \z
匹配字符串结束
         \G
匹配最后匹配完成的位置。
          \b
匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
          \B
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
     \n, \t, 等.
匹配一个换行符。匹配一个制表符。等
       \1...\9
匹配第n个分组的子表达式。
         \10
匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。
 
 
 
 
 
 
 
 
 
 

posted @ 2020-05-10 15:39  乄Keyboardman丶  阅读(811)  评论(0编辑  收藏  举报