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個分組的子表達式,如果它經匹配。否則指的是八進制字符碼的表達式。
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM