Python中好用的模塊們

Python中好用的模塊們

datetime模塊

​ 相信咱們都使用過這個模塊,那麼咱們要實現天天定時來執行程序,就能夠用一下方式來實現:django

import datetime
import time

def main():
    while True:
        while True:
            now = datetime.datetime.now()# 這裏能夠取到系統的當前時間
            if now.hour == 6 and now.minute == 30:# 取當前時間的小時和分鐘,這樣天天到這個設定好的小時和分鐘內的時候咱們就會跳出這個內循環,進入到外循環,從而執行主函數
                # 固然設定時間咱們也能夠設定秒,可是其實設定到秒的狀況下有可能沒法進入函數,時間過短系統沒法斷定
                break
            if now.hour == 9 and now.minute == 30:
                break
            if now.hour == 12 and now.minute == 30:
                break
            if now.hour == 14 and now.minute == 30:
                break
            time.sleep(20)
        # 主函數
        time.sleep(60)# 這裏加入睡眠60秒是爲了讓主函數不至於在這一分鐘內一直執行,僅執行一次就好

subprocess模塊

​ 這個模塊主要用於python調用系統的cmd窗口並返回結果,具體實現以下.微信

# encoding=utf-8
import subprocess # 導入模塊,沒裝的話本身去pip install subprocess
import sys

# 經常使用編碼
GBK = 'gbk'
UTF8 = 'utf-8'

# 解碼方式,通常 py 文件執行爲utf-8 ,可是cmd 命令爲 gbk
current_encoding = GBK

popen = subprocess.Popen(['ping', 'www.baidu.com'],
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         bufsize=1)

# 重定向標準輸出
while popen.poll() is None:  # None表示正在執行中
    r = popen.stdout.readline().decode(current_encoding)
    sys.stdout.write(r)  # 可修改輸出方式,好比控制檯、文件等

# 重定向錯誤輸出
if popen.poll() != 0:  # 不爲0表示執行錯誤
    err = popen.stderr.read().decode(current_encoding)
    sys.stdout.write(err)  # 可修改輸出方式,好比控制檯、文件等

matplotlib折線圖

'''
折線圖繪製的時候主要碰到了下面幾個問題:
    1. 標籤和折線的名稱不能使用中文
        解決:導入一個字體模塊或者不用中文,用全拼或者英文
    2. 繪圖時候要控制圖層的大小
        解決: 在剛開始繪圖的時候加入plt.figure(figsize=(10, 8)),能夠調整圖層的大小,後面的(10,8)實際大小是乘以100,也就是1000*800的圖片大小
    3. 最後保存圖片的時候保存jpg格式出錯
        解決:須要額外裝一個模塊,語句 pip install pillow
'''
# 例程以下
from font_set import font_set   # 這裏我本身寫了一個字體的模塊,讀者應該沒有,能夠忽略
import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']  # SimHei是黑體的意思

x1 = ['06:00', '12:00', '18:00', '24:00']   # 橫軸
y1 = [4, 6, 8, 23]
z1 = [5, 5, 7, 15]
a1 = [2, 9, 10, 6]

# x = np.random.random_integers(1, 20, 10)
# # y = range(len(x))


fig = plt.figure(figsize=(10, 8))   # 控制圖層的大小
ax = fig.add_subplot(1, 1, 1)
ax.plot(x1, y1)
for x, y in zip(x1, y1):
    plt.text(x, y + 0.3, '%.0f' % y, ha='center', va='bottom', fontsize=10.5)
ax.plot(x1, z1)
for x, y in zip(x1, z1):
    plt.text(x, y + 0.3, '%.0f' % y, ha='center', va='bottom', fontsize=10.5)
ax.plot(x1, a1)
for x, y in zip(x1, a1):
    plt.text(x, y + 0.3, '%.0f' % y, ha='center', va='bottom', fontsize=10.5)

plt.xlabel(u'時間', FontProperties=font_set)
plt.ylabel(u'延遲', FontProperties=font_set)
plt.title(u"各交易所交易延時", FontProperties=font_set)
plt.legend([u"中金所", u"上期所", u"大商所"], prop=font_set)
plt.savefig("1.jpg")    # 這裏要注意,要先保存再show,若是先show了保存圖片就會是空白
plt.show()

importlib模塊

首先咱們要知道importlib模塊是幹嗎的,importlib是python裏面標準庫的一部分,他能夠完成咱們python中import語句的實現,另外咱們能夠用這個模塊來自定義對象,在程序中間引入模塊的時候比較方便,又稱爲importer.框架

下面咱們介紹importlib的動態導入的功能:dom

雖然看起來動態引入很是高大上,但實際上只是給importlib模塊傳字符串而已,importlib模塊支持咱們以傳入字符串的形式來引入一個模塊,這是一種非得可貴也很是方便的用法,好比,咱們用如下小實例來證實,該實例實現了咱們經過手動配置settings.py文件來自定義可以生效的方法,是django的settings.py文件的縮略版.函數

# 首先咱們建立一個包,也就是python package,這裏咱們給包命名爲notify
# 而後在包下面建立email.py,wechat.py,settings.py,run.py

# 依次在這幾個文件裏面寫入

# email.py
class Email(object):
    def __init__(self):
        pass  # 發郵件須要的準備工做

    def send(self, content):
        print('郵件通知: %s' % content)

        
# wechat.py
class WeChat(object):
    def __init__(self):
        pass  # 發短信須要的準備工做

    def send(self, content):
        print('微信通知: %s' % content)

        

# run.py
import notify
notify.send_all("發工資啦~")



# settings.py
# 該文件裏面寫的是各個方法的路徑
NOTIFY_LIST = [
    'notify.email.Email',
    'notify.wechat.WeChat',
]


# __init__.py

from notify import settings
import importlib
# 咱們在這裏導入importlib模塊
def send_all(content):
    for module_path in settings.NOTIFY_LIST:# 這裏循環的是settings.py文件裏咱們配置的路徑
        module, class_name = module_path.rsplit('.', maxsplit=1)
        # 路徑以點右切割獲得的就是 -> module = 'notify.email' class_name = 'Email'
        mod = importlib.import_module(module)# 這裏傳過來的就是一個字符串,importlib支持字符串導入模塊,因此就至關於 from notify import email
        cls = getattr(mod, class_name)  # 利用反射獲取到模塊中的類的變量名
        obj = cls()         #加括號,類實例化產生對象
        obj.send(content)   # 對象直接調用方法,content就是要傳過去的內容

以上用字符串來直接導入模塊的方法十分方便,推薦使用,雖然如今的框架大部分已經把這些東西封裝好了,咱們直接調用就能夠了....不過了解一下原理也是好的.字體

未完待續,來日方長...編碼

相關文章
相關標籤/搜索