持续创作,加速成长!这是我参与「掘金日新计划 · 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() # 设置保存位置
)