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就是要传过去的内容

以上用字符串来直接导入模块的方法十分方便,推荐使用,虽然如今的框架大部分已经把这些东西封装好了,咱们直接调用就能够了....不过了解一下原理也是好的.字体

未完待续,来日方长...编码

相关文章
相关标签/搜索