小小前端浅学一下Python-4(模块引入及第三方模块使用)

143 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

Python专题的文章收录于专栏:Python专栏

7. 模块

1. 模块语法

1. import语句

  • 导入模块
import story
  • 导入story模块并用s表示
import story as s
  • 导入多个模块
import math,story,random

2. from...import...语句

从模块中导入一个指定部分

  • 从test中导入hi函数
from test import hi
#调用时无需加'模块.'前缀
hi()
  • 从test中导入多个部分
from test import a,b,c
  • 导入test中的所有变量、函数、类;且可以直接使用(但不推荐)
from test import *

3. if __ name __ ==' __ main __': 语句

#示例:xx.py文件

代码块①......
if __ name __ == '__ main __':
    代码块②......

#当xx.py文件被直接运行时,②将被执行
#当xx.py文件作为模块导入,②不被执行

2. 各类模块

1. time模块

sleep()

使程序休眠,延迟

import time   #调用time模块
time.sleep(secs)   #括号内为秒数

time()

用于获取当前时间戳(1970年后经过的浮点秒数)

a = time.time()

时间元组:

(tm_year , tm_mon , tm_mday , tm_hour , tm_min , tm_sec , tm_wday , tm_yday , tm_isdst)

localtime()

获取当前本地时间

localtime = time.localtime(time.time())   #接收时间戳,返回时间元组
print('本地时间为:',localtime)

asctime()

获取格式化时间

localtime = time.asctime(time.localtime(time.time())) 
#接收时间元组,返回形式为'Tue Dec 11 18:07:14 2008'的字符串

print('本地时间为:',localtime)

strftime()

返回格式化日期

start_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) 

2. random模块

randint()

随机生成一个数

import random   #调用random模块
a = random.randint(1,100)   #在1~100随机生成一个数

choice()

随机选取一个元素

import random
list = [1,2,3,4,5]
a = random.choice(list)   #从列表中随机选择一个元素

sample()

随机选取几个数

import random
list = [1,2,3,4,5]
a = random.sample(list,2)   #从序列中随机选择2个元素,返回类型为列表(字典不适用)

3. numpy模块

import numpy as np
list1 = [1,2,3,4,5,6,7,8,9]

average = np.mean(list1)   #获取list1列表的均值
average = np.median(list1)   #获取list1列表的中位数

4. math模块

引入模块

import math
num = 3.1415926

向下取整,直接用内置函数int()

print(int(num))

向上取整,调用math里的ceil()

print(math.ceil(num))

向下取整,调用math里的floor()

print(math.floor(num))

直接调用内置函数round(),取接近的整数,当小数部分为0.5时,取偶数

print(round(num))

5. csv模块

读取csv文件

with open('some.csv',newline = '') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

写入csv文件

with open('some.csv','w',newline = '') as f:
    writer = csv.writer(f)
    writer.writerows(someiterable)   #括号内为可迭代序列

csv文件是字符串文件,可以与excel文件互相转换

6. calendar模块

calendar()

import calendar
print(calendar.calendar(2021,w=2,l=1,c=6))   #打印出2021年的年历

打印格式:3个月为一行,每个月间隔为c,每日间隔为w,每周间隔行数为l。(每行长度为21w+18+2c)

isleap()

判断是否为闰年

print(calendar.isleap(2021))   

leapdays()

获取1980和2021年间的闰年数

print(calendar.leapdays(1980,2021)) 

month()

打印出2021年7月的月历

print(calendar.month(2021,7,w=2,l=1))

monthcalendar()

将2021年7月月历按每星期(行)拆分成嵌套列表

print(calendar.monthcalendar(2021,7))

monthrange()

返回两个整数,第一个代表2021年7月1号星期几的偏移量,第二个代表这个月有多少天

print(calendar.monthrange(2021,7))

prcal()

等效于print(calendar.calendar(2021,w=2,l=1,c=6))

calendar.prcal(2021,w=2,l=1,c=6)

prmonth()

等效于print(calendar.month(2021,7,w=2,l=1))

calendar.prmonth(2021,7,w=2,l=10)

setfirstweekday()

设置每周起始日

calendar.setfirstweekday(weekday)

weekday()

返回2021年7月17日的日期码(星期几的偏移量)

print(caldedar.weekday(2021,7,17))

7. smtplib模块和email模块

email实质上是一个包(package),包含多个模块,且默认包含一个init.py空文件(控制包的导入),故不能直接import email

  • 导入模块 注意这里根据邮件内容形式的不同,需要对email.mime下的不同模块进行引入
import stmplib   #导入smtplib模块
from email.mime.text import MIMEText   #内容形式为纯文本,HTML页面
from email.mime.image import MIMEImage   #内容形式为图片
from email.mime.multipart import MIMEMultipart   #内容多形式,可包含文本和附件
from email.header import Header                #导入邮件头模块
  • 实例化一个SMTP对象
server = smtplib.SMTP()   
#server = smtplib.SMTP_SSL()   #端口用SSL加密
  • 输入文本部分,同时设置文本类型以及文本编码,一般默认为plain纯文本和utf-8中文编码
content = input('文本内容')   #输入邮件文本内容
msg = MIMEText(content,type,chartset)
#content:文本内容 type:文本类型,默认为plain(纯文本) chartset:文本编码,中文为'utf-8'
  • 邮件头部分
msg['From'] = Header('xxx')    #发件人邮箱地址
msg['To'] = Header('xxx')      #收件人邮箱地址
msg['Subject'] = Header('xxx') #主题
  • 连接邮箱服务器 注意这里除了需要用到用户名外,还需要授权密码,授权密码需要在设置里面动态请求,具体的操作可以自行在网上查阅,跟着步骤做即可
server.connect('smtp.qq.com',25)   #连接QQ邮箱服务器,默认端口
#server.connect('smtp.qq.com',465)   #连接QQ邮箱服务器,QQ邮箱端口
server.login(username,password)   #登录服务器,第一个参数是用户名,第二个参数是授权密码
server.sendmail(from_addr,to_addr,msg.as_string())   #(发件人+收件人+邮件内容)as_string():将msg变为字符串 
  • 群发邮件-发邮件当然不能少了群发功能 这里提供了三种方式
#1.设置一个列表形式的变量
#  to_addrs = ['xxx','xxx','xxx']
#2.利用while循环输入到一个空列表中
#  需注意的是:由于Header()的第一个参数必须是字符串或字节,故邮件头的收件人代码应该为:
#  msg['To'] = Header(','.join(to_addrs))
#3.调用csv模块,将收件人信息写入csv中,再利用for循环,逐个读取并发送
  • 退出服务器
server.quit()   #退出服务器

8. os模块

处理目录和文件

  • 导入模块
import os
  • 获取当前操作系统类型
print(os.name)
print('Linux' if os.name=='posix' else 'Windows')   #posix是Linux操作系统,nt是Windows操作系统
  • 判断一个路径是否为绝对路径
print(os.path.isabs('hello.jpg'))   #返回False,因为括号内为相对路径
  • 获取当前文件所处的路径
print(os.getcwd()) 
  • 生成绝对路径的两种方法
print(os.path.abspath('1.png'))   #个人认为等效于print(os.getcwd(),'\1.png',sep='')
print(os.path.join(os.path.abspath('.'),'1.jpg'))   #'.'表示当前路径,这是os.path模块中的join(),与str.join()不同
  • 获取路径中的目录名和文件名
filename = '/1234/year/month/day/hello.jpg'   #可以是任意路径
print(os.path.basename(filename))   #获取文件名
print(os.path.dirname(filename))    #获取目录名
  • 返回指定目录下的所有文件名,返回形式为一个列表
print(os.listdir(os.getcwd()))   #括号内也可以为其他路径或地址
  • 分离后缀名和文件名,返回形式为一个元组
print(os.path.splitext('hello.jpg'))   #打印结果为('hello','2.jpg')
  • 将目录名和文件名分离,传入的参数为一个路径,返回形式为一个元组
#返回一个元组(可与os.path.basename()和os.path.dirname()比较)
print(os.path.split('/tmp/hello/hello.jpg'))   #打印结果为('/tmp/hello', 'hello.jpg')
  • 创建和删除目录
os.mkdir('img1')   #创建一个文件夹img1
os.makedirs('img2/file1/file2')   #创建嵌套文件夹img2→file1→file2
os.rmdir('file2')   #删除目录,只能一级一级删
#不能递归删除目录:os.rmdir('img')将报错,因为img不是空的
os.removedirs('img/file1/file2')   #也可以删除多层递归的空目录,若目录中有文件则无法删除
  • 文件重新命名
os.rename('data.txt','data1.txt')   #将文件所在目录中的data文本文件重命名为data1
  • 判断文件或目录是否存在
print(os.path.exists('data.txt'))   #判断该文件是否在文件所在目录中
print(os.path.exists('/home/kiosk/PycharmProjects/2019python/ips.txt'))   #判断括号中的目录是否存在
  • 改变当前目录到指定目录中
print(os.getcwd())
path='/tmp'
os.chdir(path)   #改变目录到\tmp
print(os.getcwd())

9. MyQR模块

生成二维码

  • 导入模块
from MyQR import myqr
import os   #用于生成二维码之后设置保存的位置
  • 生成二维码

二维码的内容形式可以是字符串也可以是网址,如果是字符串则扫描二维码后显示对象的文本,网址则会进行跳转

同时还可以设置二维码的各种样式,也可以将二维码与图片进行结合

myqr.run(
    words = "https://www.baidu.com",  # 可以是字符串,也可以是网址(前面要加http(s)://)
    version = 1,  # 设置容错率为最高
    level = 'H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
    picture = "erweima.gif",  # 将二维码和图片合成
    colorized = True,  # 彩色二维码,False为黑白
    contrast = 1.0,  # 用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0
    brightness = 1.0,  # 用来调节图片的亮度,其余用法和取值同上
    save_name = "out.gif",  # 保存文件的名字,格式可以是jpg,png,bmp,gif
    save_dir = os.getcwd()  # 设置保存位置
)