SMTP是发送邮件的协议,Python 2.3版本开始内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。本文以QQ邮件为例,用python发送各类邮件。
Python对SMTP支持主要使用smtplib和email两个模块,email模块负责构造邮件,smtplib模块负责发送邮件。
一、 传输简单邮件 smtplib模块
1. SMTP类定义
smtplib.SMTP([host[,port[,local_hostname[,timeout]]]])
作为SMTP的构造函数,功能是与smtp服务器建立连接,在连接成功后,就可以向服务器发送相关请求,比如登录、校验、发送、退出等。
host参数为远程smtp主机地址,比如smtp.163.com
port为连接端口,默认为25
local_hostname的作用是在本地主机的FQDN(完整的域名)发送HELO/EHLO(标识用户身份)指令
timeout为连接或尝试在多少秒超时
由于安全问题,通常不直接使用smtplib.SMTP来实例化,第三方邮箱会认为它是不安全的而报错。使用加密过的SMTP_SSL来实例化,它负责让服务器做出具体操作,它有两个参数:
参数1:smtp服务器地址,但它是bytes格式,所以需要编码
参数2:smtp端口,SMTP_SSL协议默认端口是465
smtp_srv = "smtp.qq.com"
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
2. SMTP类方法
SMTP.connect([host[,port]]):连接远程smtp主机
host为远程主机地址,port为远程主机smtp端口,也可以直接使用host:port形式来表示
SMTP.connect("smtp.163.com","25")
SMTP.login(user, password):远程smtp主机的校验方法
参数为用户名与密码(或者授权码,视邮箱而定)
SMTP.login("[email protected] ","sdjkg358")
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]):实现邮件的发送功能
参数依次为是发件人、收件人(列表)、邮件内容
SMTP.sendmail("[email protected] ",["[email protected] ","[email protected] "],body)
SMTP.starttls([keyfile[, certfile]]):启用TLS(安全传输)模式
所有SMTP指令都将加密传输,例如使用gmail的smtp服务时需要启动此项才能正常发送邮件,如SMTP.starttls()。
二、 定制个性化邮件 email模块
除简单文本外,很多时候邮件中还会包含HTML、图片、音频、附件等。MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)作为一种新的扩展邮件格式很好地补充了这一点。
可以将email.mime理解成smtplib模块邮件内容主体的扩展,从原先默认只支持纯文本格式扩展到HTML,同时支持附件、音频、图像等格式,smtplib只负责邮件的投递即可。
下面介绍几个常用的MIME实现类:
email.mime.multipart.MIMEMultipart([_subtype[,boundary[,_subparts[,_params]]]]) :包含多个部分邮件体的MIME对象。
参数_subtype指定要添加到 "Content-type:multipart/subtype" 报头的三种可选子类型:
mixed(默认):构建一个带附件的邮件体
related:构建内嵌资源的邮件体
alternative:构建纯文本与超文本共存的邮件体
email.mime.audio.MIMEAudio (_audiodata[,_subtype[,_encoder[,**_params]]]):创建包含音频数据的邮件体
_audiodata包含原始二进制音频数据的字节字符串。
email.mime.image.MIMEImage(_imagedata[,_subtype[,_encoder[,**_params]]]):创建包含图片数据的邮件体
_imagedata是包含原始图片数据的字节字符串。
email.mime.text.MIMEText (_text[,_subtype[,_charset]]):创建包含文本数据的邮件体
_text是包含消息负载的字符串,_subtype指定文本类型,支持plain(默认值)或html类型的字符串。
三、发送简单文本邮件
下面是一个小例子,只简单发送文本数据
1. 获取授权码
进入QQ 邮箱的主界面→设置→账户,开启“POP3/SMTP服务”和“IMAP/SMTP 服务”。
开启后会弹出授权码,记录下来,例如
POP3/SMTP服务:kkkkkkkkkkkkkk
IMAP/SMTP服务:jjjjjjjjjjjjjjjjjjjjjjjjjjj
2. Python代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@Time : 2022/2/5 23:03
#@File : python_email.py
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
# 发件人
from_name = "Hehuyi_In"
# 发件邮箱
from_addr = "[email protected] "
# 发件邮箱授权码,注意不是QQ邮箱密码
from_pwd = "jjjjjjjjjj"
# 收件邮箱
to_addr = "[email protected] "
# 邮件标题
my_title = "Hehuyi Test"
# 邮件正文
my_msg = "Hello World"
# MIMEText三个主要参数
# 1. 邮件内容
# 2. MIME子类型,plain表示text类型
# 3. 邮件编码格式,使用"utf-8"避免乱码
msg = MIMEText(my_msg, 'plain', 'utf-8')
msg['From'] = formataddr([from_name, from_addr])
# 邮件的标题
msg['Subject'] = my_title
# SMTP服务器地址,QQ邮箱的SMTP地址是"smtp.qq.com"
smtp_srv = "smtp.qq.com"
try:
# 不能直接使用smtplib.SMTP来实例化,第三方邮箱会认为它是不安全的而报错
# 使用加密过的SMTP_SSL来实例化,它负责让服务器做出具体操作,它有两个参数
# 第一个是服务器地址,但它是bytes格式,所以需要编码
# 第二个参数是服务器的接受访问端口,SMTP_SSL协议默认端口是465
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
# 使用授权码登录QQ邮箱
srv.login(from_addr, from_pwd)
# 使用sendmail方法来发送邮件,它有三个参数
# 第一个是发送地址
# 第二个是接受地址,是list格式,可以同时发送给多个邮箱
# 第三个是发送内容,作为字符串发送
srv.sendmail(from_addr, [to_addr], msg.as_string())
print('发送成功')
except Exception as e:
print('发送失败')
finally:
#无论发送成功还是失败都要退出你的QQ邮箱
srv.quit()
执行代码
注意Python文件名不能和import的包名相同,否则会遇到以下报错
E:\Python36\python.exe E:/pytest/email.py
Traceback (most recent call last):
File "E:/pytest/email.py", line 7, in
import smtplib
File "E:\Python36\lib\smtplib.py", line 47, in
import email.utils
File "E:\pytest\email.py", line 8, in
from email.mime.text import MIMEText
ModuleNotFoundError: No module named 'email.mime'; 'email' is not a package
Process finished with exit code 1
查看QQ邮箱,发现果然收到了新邮件,并且标题、发件人、正文都跟我们设置的一样
四、 发送HTML格式邮件
本示例通过引入email.mime的MIMEText类来实现支持HTML格式的邮件,支持所有HTML元素,包含表格、图片、动画、CSS样式、表单等。使用HTML的表格定制美观的业务报表:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022/2/5 23:03
# @Author: Hehuyi_In
# @File : html_email.py
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
# 发件人
from_name = "Hehuyi_In"
# 发件邮箱
from_addr = "[email protected] "
# 发件邮箱授权码,注意不是QQ邮箱密码
from_pwd = "jjjjjjj"
# 收件邮箱
to_addr = "[email protected] "
# 邮件标题
my_title = "HTML Test"
# 邮件正文,html格式
my_msg = '''
*官网数据 更多>>
1)日访问量:152433 访问次数:23651 页面浏览量:45123 点击数:545122 数据流量:504Mb
2)状态码信息
500:105 404:3264 503:214
3)访客浏览器信息
IE:50% firefox:10% chrome:30% other:10%
4)页面信息
/index.php 42153
/view.php 21451
/login.php 5112
'''
# 参数2改为html
msg = MIMEText(my_msg, 'html', 'utf-8')
msg['From'] = formataddr([from_name, from_addr])
# 邮件的标题
msg['Subject'] = my_title
# SMTP服务器地址
smtp_srv = "smtp.qq.com"
try:
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
# 使用授权码登录QQ邮箱
srv.login(from_addr, from_pwd)
# 使用sendmail方法来发送邮件
srv.sendmail(from_addr, [to_addr], msg.as_string())
print('发送成功')
except Exception as e:
print('发送失败')
finally:
# 无论发送成功还是失败都要退出你的QQ邮箱
srv.quit()
运行结果
五、 发送图文格式邮件
当要求包含图片数据的邮件内容时,需要引用MIMEImage类,若邮件主体由多个MIME对象组成,则同时需引用MIMEMultipart类来进行组装。
本示例通过MIMEText与MIMEImage类的组合来实现图文格式邮件的定制:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022-02-07 22:00
# @Author: Hehuyi_In
# @File : image_email.py
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.utils import formataddr
# 发件人
from_name = "Hehuyi_In"
# 发件邮箱
from_addr = "[email protected] "
# 发件邮箱授权码,注意不是QQ邮箱密码
from_pwd = "xxxxx"
# 收件邮箱
to_addr = "[email protected] "
# 邮件标题
my_title = "HTML+Image Test"
# 添加图片函数,参数1:图片路径,参数2:图片id
def addimg(src,imgid):
fp = open(src,'rb') # 打开文件
msg_image = MIMEImage(fp.read()) # 创建MIMEImage对象,读取图片内容并作为参数
fp.close() # 关闭文件
msg_image.add_header('Content-ID',imgid) # 指定图片文件的Content-ID, 标签src用到
return msg_image
# 创建MIMEMultipart对象,采用related定义内嵌资源的邮件体
msg_multipart = MIMEMultipart('related')
# 创建MIMEText对象,HTML元素包括表格及图片
msg_text = MIMEText("""
""","html","utf-8") # 标签的src属性是通过Content-ID来引用的
# MIMEMultipart对象附加MIMEText及MIMEImage的内容
msg_multipart.attach(msg_text)
msg_multipart.attach(addimg("img/001.png","001")) # 图片路径与标签,001对应上方html中的
msg_multipart.attach(addimg("img/002.png","002"))
msg_multipart.attach(addimg("img/003.png","003"))
msg_multipart.attach(addimg("img/004.png","004"))
# 发件人
msg_multipart['From'] = formataddr([from_name, from_addr])
# 邮件标题
msg_multipart['Subject'] = my_title
# SMTP服务器地址
smtp_srv = "smtp.qq.com"
try:
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
# 使用授权码登录QQ邮箱
srv.login(from_addr, from_pwd)
# 使用sendmail方法来发送邮件
srv.sendmail(from_addr, [to_addr], msg_multipart.as_string())
print('发送成功')
except Exception as e:
print('发送失败')
finally:
# 无论发送成功还是失败都要退出你的QQ邮箱
srv.quit()
运行结果如图
六、 发送带附件的邮件
本示例通过MIMEText与MIMEImage类的组合,实现图文邮件格式,另通过MIMEText类再定义Content-Disposition属性来实现带附件的邮件。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022-02-07 22:33
# @Author: Hehuyi_In
# @File : attach_email.py
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.utils import formataddr
# 发件人
from_name = "Hehuyi_In"
# 发件邮箱
from_addr = "[email protected] "
# 发件邮箱授权码,注意不是QQ邮箱密码
from_pwd = "xxxxx"
# 收件邮箱
to_addr = "[email protected] "
# 邮件标题
my_title = "Text+Image+Attachment Test"
# 添加图片函数,参数1:图片路径,参数2:图片id
def addimg(src,imgid):
fp = open(src,'rb') # 打开文件
msg_image = MIMEImage(fp.read()) # 创建MIMEImage对象,读取图片内容并作为参数
fp.close() # 关闭文件
msg_image.add_header('Content-ID',imgid) # 指定图片文件的Content-ID, 标签src用到
return msg_image
# 创建MIMEMultipart对象,采用related定义内嵌资源的邮件体
msg_multipart = MIMEMultipart('related')
#创建一个MIMEText对象,HTML元素包括文字与图片
msg_text = MIMEText("sqlserver介绍 详情参考附件 ","html","utf-8")
# 创建一个MIMEText对象,附加sqlserver.txt文档
msg_attach = MIMEText(open("doc/sqlserver.txt", "rb").read(),"base64","utf-8")
# 指定文件格式类型
msg_attach["Content-Type"] = "application/octet-stream"
# 指定Content-Disposition值为attachment则出现下载保存对话框,保存的默认文件名使用filename指定
msg_attach["Content-Disposition"] = "attachment; filename=\"sqlserver.txt\""
# MIMEMultipart对象附加text,img,attach内容
msg_multipart.attach(msg_text)
msg_multipart.attach(addimg("img/001.png","001")) # 图片路径与标签,001对应上方html中的
msg_multipart.attach(msg_attach)
# 发件人
msg_multipart['From'] = formataddr([from_name, from_addr])
# 邮件标题
msg_multipart['Subject'] = my_title
# SMTP服务器地址
smtp_srv = "smtp.qq.com"
try:
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
# 使用授权码登录QQ邮箱
srv.login(from_addr, from_pwd)
# 使用sendmail方法来发送邮件
srv.sendmail(from_addr, [to_addr], msg_multipart.as_string())
print('发送成功')
except Exception as e:
print('发送失败')
# 打印具体报错
print(e)
finally:
# 无论发送成功还是失败都要退出你的QQ邮箱
srv.quit()
运行结果如图
参考
《python自动化运维技术与最佳实践》
https://docs.python.org/2.7/library/smtplib.html
https://docs.python.org/2.7/library/email.mime.html
用python发送qq邮件_fgdwa的博客-CSDN博客_python发送qq邮件
python发送QQ邮件_齐天大圣的博客-CSDN博客_python 发送qq邮件
你可能感兴趣的:(Python,脚本&命令,运维,python,自动化)
rust实现的快捷补全到剪贴板的实用工具
余很多之很多
yu的工具 rust 开发语言 后端
最近在兼职项目中老是遇到这样的场景:在云服务器之间通过scp命令传输文件,密码太长记不住(客户服务器不方便ssh-copy-id)在服务器上使用mysql命令登录修改数据,数据库密码太长记不住(客户设置的密码,直接改掉哈?)自己电脑使用geminicli需要代理,代理命令太长记不住(简单的放入脚本中不能生效)之前的做法都是记录到本地记事本,然后打开记事本找到对应的密码再复制到剪贴板,但是这样太麻烦
小程序常用api
xkxnq
小程序
1.wx.request-发起网络请求用于向服务器发送HTTP请求,获取数据或提交表单。//示例:GET请求获取数据wx.request({url:'https://api.example.com/data',//替换为实际API地址method:'GET',success:(res)=>{console.log('请求成功',res.data);},fail:(err)=>{console.er
mediamtx v1.13.1版本详解:2025年7月21日最新功能与优化汇总
福大大架构师每日一题
文心一言vschatgpt golang
mediamtx作为一款高性能的流媒体服务器软件,持续在稳定性、兼容性和用户体验方面进行优化迭代。2025年7月21日,mediamtx发布了1.13.1版本,本次更新在多个协议支持、功能完善及依赖库升级方面进行了重要改进。本文将围绕mediamtxv1.13.1版本的具体修复和增强内容进行深度解析,帮助广大开发者和运维人员快速理解新版本亮点及实用价值。一、版本概述mediamtxv1.13.1定
【python+SQLAlchemy】
ryanling河
python 数据库 sql
需要先安装pymysql模块,以便能够在SQLAlchemy中使用MySQL数据库。使用以下命令进行安装:pipinstallSQLAlchemypipinstallpymysql目前SQLAlchemy版本是2.0.0以上了以下是基本写法以便快速学习fromsqlalchemyimportcreate_engine,Column,Integer,Stringfromsqlalchemy.ormi
python sqlalchemy连接oracle_Python SQLalchemy 基础操作之数据库增删改查
weixin_39970994
python
ORM全称ObjectRelationalMapping,即对象关系映射。简单的说,ORM将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。SQLAlchemy是Python社区最知名的ORM工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。SQLAlchemy优点:简洁易读:将数据
启新教育趣辅导02052100315 罗子杰感悟
庭院深深深几许_0e69
【关键词】能够决策1.正如是人体的决策者、指挥部是军队的决策者一样,每一个行动在执行之前都需要一个决策者,小到家务,大到公司项目乃至国家事务。没有一个决策者,整个行动便无法正常进行。由于我们每个人扮演的角色多种多样,每个人都一定会在某个行动中成为决策者。因此,学会如何决策很有必要!2.文章中告诉我们四种决策方式,即命令式、顾问式、投票式和共识式,并且需要具体问题,具体分析,根据实际情况的不同选择不
Uniapp微信小程序开发:后端服务器搭建指南(语言选择+部署方案)
目录前言:Uniapp+微信小程序的架构模式️后端服务器的作用后端语言选择(Node.js/Java/Python/PHP/Go)☁️服务器部署方案(云服务器vsServerless)实战:如何连接Uniapp与后端API安全优化:HTTPS、JWT、接口鉴权数据库选择(MySQL、MongoDB、云数据库)总结&最佳实践1.前言:Uniapp+微信小程序的架构模式Uniapp是一个基于Vue.j
华为OD机试 2025 B卷 - 最大括号深度 (C++ & Python & JAVA & JS & GO)
无限码力
华为OD机试真题刷题笔记 华为od 华为OD机试 华为OD机试 2025B卷 华为OD2025B卷 华为机试2025B卷
最大括号深度华为OD机试真题目录点击查看:华为OD机试2025B卷真题题库目录|机考题库+算法考点详解华为OD机试2025B卷100分题型题目描述现有一字符串仅由‘(‘,’)’,’{‘,’}’,’[‘,’]’六种括号组成。若字符串满足以下条件之一,则为无效字符串:任一类型的左右括号数量不相等;存在未按正确顺序(先左后右)闭合的括号。输出括号的最大嵌套深度,若字符串无效则输出0。0≤字符串长度≤10
网络设备功能对照表
两圆相切
网络规划设计师 web安全 网络 安全
一、网络安全设备功能对照表设备类型代表设备核心作用形象比喻典型应用场景防火墙PaloAltoPA-7000•网络边界访问控制(ACL)•深度包检测(DPI)•威胁情报联动智能门禁系统刷卡识人脸,危险分子禁入互联网接入边界网闸网神PowerV•物理隔离网络通信•文件摆渡传输•协议剥离与重构隔离传菜梯饭菜可送人,火苗不过墙政府内外网隔离堡垒机齐治Privilege•运维操作审计•指令级行为记录•特权账
网络数据分层封装与解封过程的详细说明
两圆相切
网络规划设计师 网络
网络数据分层封装全流程数据封装流程(发送端)-CSDN优化版OSI层次封装动作数据单元关键头部信息示例应用层添加应用层协议头部报文(Message)GET/index.htmlHTTP/1.1Host:www.example.com表示层数据加密/压缩PPDUTLSv1.3RecordLayerContentType:ApplicationData会话层添加会话控制标识SPDUSIPCall-ID
Maven
iam_leeqing
JAVA开发 maven java
Maven是一个面向Java项目的综合性项目管理和构建工具,它通过提供标准化的项目结构、依赖管理和构建生命周期来简化开发流程。Maven使用XML格式的pom.xml文件来定义项目配置和依赖关系,支持自动化构建过程,包括编译、测试、打包和部署等阶段。此外,Maven还能自动下载所需的库文件并解决依赖冲突,同时提供了丰富的插件支持以扩展其功能。通过使用Maven,开发者可以提高构建的一致性和可重复性
Python Matplotlib中的fontdict参数说明
@MMiL
PyBuild python matplotlib pandas numpy
文章目录1fontdict参数的常用属性1.1使用示例1.2其他注意事项1.3结合其他参数各位老板好,在Python的Matplotlib库中,fontdict参数用于定义文本属性的字典。这些属性包括字体大小、颜色、样式等,主要用于控制标题、标签和其他文本元素的显示效果。通过将fontdict传递给相关函数(如plt.title、plt.xlabel等),可以自定义文本的外观。1fontdict参
Dify丝滑云或本地docker部署步骤 适用Linux & macOS
neon98
大模型前端 docker 容器 ai macos linux 人工智能
服务器必须有超过4GB的内存!!!Step1:gitclonegitclonehttps://githubfast.com/langgenius/dify.git//从GitHub服务器直接克隆可能会失败。其他GitHub镜像也可以。Step2:docker登录dockerloginghcr.io-u[yourusername]-p[yourGitHubaccesstoken]//此命令用自己的的
77-7 带出节奏快感
习凤教练
此为77个文案技巧的第7篇——带出节奏快感。77-7我们一些人写文案时,总想要带入很多信息,害怕因为写的不全而遗漏点什么。殊不知这样会降低传达速度。相反,节奏感较快的文案就能瞬间进入人心,代入感很强。『见』在设计文案或者商品名称之前,要务必记住带出节奏快感。介绍三种方式及其案例:第一种:试着透过命令句例如:喂~喝茶啰!吃饭时间到了!第二种:设计冷笑话例如:色狼退场ICOCA(出发吧)第三种:以功能
【CNN】卷积神经网络池化- part2
1.池化降采样,减少参数数量,避免过拟合,提高鲁棒性2.池化操作池化操作(也称为下采样,Subsampling)类似卷积操作,使用的也是一个很小的矩阵,叫做池化核,但是池化核本身没有参数,只是通过对输入特征矩阵本身进行运算,它的大小通常是2x2、3x3、4x4等,其中2x2使用频率最高。然后将池化核在卷积得到的输出特征图中进行池化操作,需要注意的是,池化的过程中也有Padding方式以及步长的概念
基于Paillier同态加密算法的金融数据安全共享机制研究【附数据】
金融数据分析与建模专家金融科研助手|论文指导|模型构建✨专业领域:金融数据处理与分析量化交易策略研究金融风险建模投资组合优化金融预测模型开发深度学习在金融中的应用擅长工具:Python/R/MATLAB量化分析机器学习模型构建金融时间序列分析蒙特卡洛模拟风险度量模型金融论文指导内容:金融数据挖掘与处理量化策略开发与回测投资组合构建与优化金融风险评估模型期刊论文✅具体问题可以私信或查看文章底部二维码
深入解析Linux命令:创建目录mkdir的全面指南
梦幻南瓜
linux linux 服务器 运维
在Linux操作系统中,mkdir命令是创建目录的基础工具。无论是系统管理员还是普通用户,掌握mkdir的使用方法都是必不可少的。本文将详细解读mkdir命令的用法、选项及其在实际操作中的应用场景。1.mkdir命令的基本用法mkdir是“makedirectory”的缩写,用于在指定路径下创建新目录。其基本语法如下:mkdir[选项]目录名1.1创建单个目录最简单的用法是创建一个目录。例如,要在
吴恩达 机器学习cs229-学习笔记-更新中
是娜个二叉树!
机器学习 学习 笔记
吴恩达机器学习cs22901基础概念语言:Matlab/python监督学习定义:获取一组数据集拟合数据从X到Y的映射回归问题:预测的Y是连续的,Y是实数分类问题:分类指的是Y取离散值,输出是离散的两组,正示例和负示例,把所有样本推到这条直线上,用0,1,标识逻辑回归算法,拟合直线区分正,负示例处理相对大量特征的回归算法或者分类算法支持向量机算法:它使用的不是1,2,3,10个输入特征,而是使用无
ChatTongyi × LangChain:开启多模态AI应用创新之门
阿里云通义实验室推出的ChatTongyi(基于通义千问大模型)与LangChain框架的深度集成,为开发者打造了一套高效、灵活、全面的AI开发工具链。无论是文本对话、复杂任务自动化,还是图像理解,这一组合都为多场景智能应用的落地提供了坚实的基础。以下内容将从技术亮点到行业价值,带您系统梳理其核心能力与创新应用场景。1.极速上手:自然语言对话与流式输出核心能力:多轮对话理解:凭借强大的语言建模能力
Python标准模块--importlib
作者:zhbzz2007出处:http://www.cnblogs.com/zhbzz2007欢迎转载,也请保留这段声明。谢谢!1模块简介Python提供了importlib包作为标准库的一部分。目的就是提供Python中import语句的实现(以及__import__函数)。另外,importlib允许程序员创建他们自定义的对象,可用于引入过程(也称为importer)。什么是imp?另外有一个
Python模块的动态加载机制
weixin_30632089
运维 python
Python在运行环境初始化中,就将sysmodule加载到了内存中,实际上,Python是将一大批的module加载到了内存中。但是为了使local名字空间能够达到最干净的效果,Python并没有将这些符号暴露在当前的local名字空间中,而是需要用户显式的通过import机制通知Python:需要将这个符号引入到local名字空间中。这些预先被加载进内存的module存放在sys.module
python学习打卡:DAY 18 推断聚类后簇的类型
西西西仓鼠
python训练营 python 学习 聚类
@浙大疏锦行聚类后的分析:推断簇的类型知识点回顾:推断簇含义的2个思路:先选特征和后选特征通过可视化图形借助ai定义簇的含义科研逻辑闭环:通过精度判断特征工程价值作业:参考示例代码对心脏病数据集采取类似操作,并且评估特征工程后模型效果有无提升。在聚类分析中,推断簇的类型是理解数据内在结构和业务意义的关键步骤。以下是系统化的推断方法及常见簇类型的总结:一、簇的基本类型明显分离的簇特征:不同簇中任意两
python 协程进阶
cliffordl
async python python 开发语言
python协程实现python协程进阶python生成器的作用协程在多个模型流式输出中的使用实例文章目录1.协程基础1.1.协程名词解释1.2.基本工作流程1.3.async协程执行1.3.1.协程顺序执行(asyncio.run)1.3.2.协程顺序执行(await)1.3.3.协程同步执行(asyncio.create_task)2.可等待对象(Awaitables)2.1.Coroutin
python 基于 httpx 的流式请求
文章目录1.环境介绍2.同步客户端2.1.面向过程2.1.1.流式输出2.1.2.非流式输出2.2.面向对象3.异步客户端3.1.面向过程3.2.面向对象3.3.Attemptedtocallasynciteratoronanasyncstream.参考:https://www.jb51.net/article/262636.htm次要参考:https://blog.csdn.net/gitblo
阿里云ssl证书自动安装及续订(acme)
cherishSpring
nginx linux # docker容器 阿里云 ssl 数据库
docker命令
cherishSpring
# docker容器 docker java eureka
目录1、常用命令2、容器生命周期管理创建一个新容器并运行一个命令杀掉一个运行中的容器删除一个或多个容器3、容器操作列出容器获取容器/镜像的元数据从服务器获取实时事件将文件系统作为一个tar归档文件导出到STDOUT4、容器rootfs命令从容器创建一个新的镜像检查容器里文件结构的更改容器与主机之间的数据拷贝5、镜像仓库登陆到Docker镜像仓库登出Docker镜像仓库从镜像仓库中拉取或者更新指定镜
Python实现动态加载模块的方法
后端架构魔法构筑者
Python
在Python中,动态加载模块是一种常见的技术,它允许我们在运行时根据需要加载和使用模块,而不是在程序启动时就将所有模块都导入。这种方式可以提高程序的灵活性和性能。下面我将详细介绍几种实现动态加载模块的方法,并提供相应的源代码示例。使用importlib模块importlib是Python的一个内置模块,它提供了一些函数来实现动态加载模块。下面是一个简单的示例:importimportlibdef
从零开始:搭建你的人工智能开发环境
人工智能教程
人工智能 YOLO 机器学习 transformer 线性回归 动态规划 排序算法
前言在人工智能和机器学习的旅程中,一个稳定且高效的开发环境是成功的关键第一步。无论是初学者还是经验丰富的开发者,一个配置良好的开发环境都能大大提高工作效率,减少遇到的问题。本文将从零开始,逐步指导你如何搭建一个完整的人工智能开发环境,包括操作系统选择、Python安装、常用库的配置以及开发工具的选择。一、选择合适的操作系统(一)主流操作系统介绍在搭建人工智能开发环境时,首先需要选择一个合适的操作系
Python打卡Day11 常见的调参方式
核心知识:1.模型=算法+实例化设置的外参(超参数)+训练得到的内参2.只要调参就需要考2次所以如果不做交叉验证,就需要划分验证集和测试集,但是很多调参方法中都默认有交叉验证,所以实际中可以省去划分验证集和测试集的步骤基线模型(基准模型):首先运行一个使用默认参数的模型,记录其性能作为比较的基准。超参数调整数据1.网格搜索(GridSearchCV):-需要定义参数的网格(param_grid),
Python爬虫实战:深入无限滚动页面抓取原理与Playwright实现
Python爬虫项目
python 爬虫 开发语言 区块链 json
一、前言:无限滚动页面的挑战在现代Web开发中,「无限滚动(InfiniteScrolling)」早已取代了传统的分页模式。以微博热搜流、知乎首页、抖音推荐页为例,用户向下滚动时会自动加载更多内容,这种体验虽提升了交互性,却让传统爬虫面临巨大挑战:页面初始只加载一部分内容剩余内容由JavaScript在滚动事件中动态加载requests类爬虫无法感知页面行为为什么传统爬虫抓不到数据?因为页面数据不
Java序列化进阶篇
g21121
java序列化
1.transient
类一旦实现了Serializable 接口即被声明为可序列化,然而某些情况下并不是所有的属性都需要序列化,想要人为的去阻止这些属性被序列化,就需要用到transient 关键字。
escape()、encodeURI()、encodeURIComponent()区别详解
aigo
JavaScript Web
原文:http://blog.sina.com.cn/s/blog_4586764e0101khi0.html
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:,decodeURI,decodeURIComponent 。
下面简单介绍一下它们的区别
1 escape()函
ArcgisEngine实现对地图的放大、缩小和平移
Cb123456
添加矢量数据 对地图的放大、缩小和平移 Engine
ArcgisEngine实现对地图的放大、缩小和平移:
个人觉得是平移,不过网上的都是漫游,通俗的说就是把一个地图对象从一边拉到另一边而已。就看人说话吧.
具体实现:
一、引入命名空间
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Controls;
二、代码实现.
Java集合框架概述
天子之骄
Java集合框架概述
集合框架
集合框架可以理解为一个容器,该容器主要指映射(map)、集合(set)、数组(array)和列表(list)等抽象数据结构。
从本质上来说,Java集合框架的主要组成是用来操作对象的接口。不同接口描述不同的数据类型。
简单介绍:
Collection接口是最基本的接口,它定义了List和Set,List又定义了LinkLi
旗正4.0页面跳转传值问题
何必如此
java jsp
跳转和成功提示
a) 成功字段非空forward
成功字段非空forward,不会弹出成功字段,为jsp转发,页面能超链接传值,传输变量时需要拼接。接拼接方式list.jsp?test="+strweightUnit+"或list.jsp?test="+weightUnit+&qu
全网唯一:移动互联网服务器端开发课程
cocos2d-x小菜
web开发 移动开发 移动端开发 移动互联 程序员
移动互联网时代来了! App市场爆发式增长为Web开发程序员带来新一轮机遇,近两年新增创业者,几乎全部选择了移动互联网项目!传统互联网企业中超过98%的门户网站已经或者正在从单一的网站入口转向PC、手机、Pad、智能电视等多端全平台兼容体系。据统计,AppStore中超过85%的App项目都选择了PHP作为后端程
Log4J通用配置|注意问题 笔记
7454103
DAO apache tomcat log4j Web
关于日志的等级 那些去 百度就知道了!
这几天 要搭个新框架 配置了 日志 记下来 !做个备忘!
#这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~!
log4j.rootLogger=INFO,allLog
# DAO层 log记录到dao.log 控制台 和 总日志文件
log4j.logger.DAO=INFO,dao,C
SQLServer TCP/IP 连接失败问题 ---SQL Server Configuration Manager
darkranger
sql c windows SQL Server XP
当你安装完之后,连接数据库的时候可能会发现你的TCP/IP 没有启动..
发现需要启动客户端协议 : TCP/IP
需要打开 SQL Server Configuration Manager...
却发现无法打开 SQL Server Configuration Manager..??
解决方法: C:\WINDOWS\system32目录搜索framedyn.
[置顶] 做有中国特色的程序员
aijuans
程序员
从出版业说起 网络作品排到靠前的,都不会太难看,一般人不爱看某部作品也是因为不喜欢这个类型,而此人也不会全不喜欢这些网络作品。究其原因,是因为网络作品都是让人先白看的,看的好了才出了头。而纸质作品就不一定了,排行榜靠前的,有好作品,也有垃圾。 许多大牛都是写了博客,后来出了书。这些书也都不次,可能有人让为不好,是因为技术书不像小说,小说在读故事,技术书是在学知识或温习知识,有些技术书读得可
document.domain 跨域问题
avords
document
document.domain用来得到当前网页的域名。比如在地址栏里输入:javascript:alert(document.domain); //www.315ta.com我们也可以给document.domain属性赋值,不过是有限制的,你只能赋成当前的域名或者基础域名。比如:javascript:alert(document.domain = "315ta.com");
关于管理软件的一些思考
houxinyou
管理
工作好多看年了,一直在做管理软件,不知道是我最开始做的时候产生了一些惯性的思维,还是现在接触的管理软件水平有所下降.换过好多年公司,越来越感觉现在的管理软件做的越来越乱.
在我看来,管理软件不论是以前的结构化编程,还是现在的面向对象编程,不管是CS模式,还是BS模式.模块的划分是很重要的.当然,模块的划分有很多种方式.我只是以我自己的划分方式来说一下.
做为管理软件,就像现在讲究MVC这
NoSQL数据库之Redis数据库管理(String类型和hash类型)
bijian1013
redis 数据库 NoSQL
一.Redis的数据类型
1.String类型及操作
String是最简单的类型,一个key对应一个value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
Set方法:设置key对应的值为string类型的value
Tomcat 一些技巧
征客丶
java tomcat dos
以下操作都是在windows 环境下
一、Tomcat 启动时配置 JAVA_HOME
在 tomcat 安装目录,bin 文件夹下的 catalina.bat 或 setclasspath.bat 中添加
set JAVA_HOME=JAVA 安装目录
set JRE_HOME=JAVA 安装目录/jre
即可;
二、查看Tomcat 版本
在 tomcat 安装目
【Spark七十二】Spark的日志配置
bit1129
spark
在测试Spark Streaming时,大量的日志显示到控制台,影响了Spark Streaming程序代码的输出结果的查看(代码中通过println将输出打印到控制台上),可以通过修改Spark的日志配置的方式,不让Spark Streaming把它的日志显示在console
在Spark的conf目录下,把log4j.properties.template修改为log4j.p
Haskell版冒泡排序
bookjovi
冒泡排序 haskell
面试的时候问的比较多的算法题要么是binary search,要么是冒泡排序,真的不想用写C写冒泡排序了,贴上个Haskell版的,思维简单,代码简单,下次谁要是再要我用C写冒泡排序,直接上个haskell版的,让他自己去理解吧。
sort [] = []
sort [x] = [x]
sort (x:x1:xs)
| x>x1 = x1:so
java 路径 配置文件读取
bro_feng
java
这几天做一个项目,关于路径做如下笔记,有需要供参考。
取工程内的文件,一般都要用相对路径,这个自然不用多说。
在src统计目录建配置文件目录res,在res中放入配置文件。
读取文件使用方式:
1. MyTest.class.getResourceAsStream("/res/xx.properties")
2. properties.load(MyTest.
读《研磨设计模式》-代码笔记-简单工厂模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 个人理解:简单工厂模式就是IOC;
* 客户端要用到某一对象,本来是由客户创建的,现在改成由工厂创建,客户直接取就好了
*/
interface IProduct {
SVN与JIRA的关联
chenyu19891124
SVN
SVN与JIRA的关联一直都没能装成功,今天凝聚心思花了一天时间整合好了。下面是自己整理的步骤:
一、搭建好SVN环境,尤其是要把SVN的服务注册成系统服务
二、装好JIRA,自己用是jira-4.3.4破解版
三、下载SVN与JIRA的插件并解压,然后拷贝插件包下lib包里的三个jar,放到Atlassian\JIRA 4.3.4\atlassian-jira\WEB-INF\lib下,再
JWFDv0.96 最新设计思路
comsci
数据结构 算法 工作 企业应用 公告
随着工作流技术的发展,工作流产品的应用范围也不断的在扩展,开始进入了像金融行业(我已经看到国有四大商业银行的工作流产品招标公告了),实时生产控制和其它比较重要的工程领域,而
vi 保存复制内容格式粘贴
daizj
vi 粘贴 复制 保存原格式 不变形
vi是linux中非常好用的文本编辑工具,功能强大无比,但对于复制带有缩进格式的内容时,粘贴的时候内容错位很严重,不会按照复制时的格式排版,vi能不能在粘贴时,按复制进的格式进行粘贴呢? 答案是肯定的,vi有一个很强大的命令可以实现此功能 。
在命令模式输入:set paste,则进入paste模式,这样再进行粘贴时
shell脚本运行时报错误:/bin/bash^M: bad interpreter 的解决办法
dongwei_6688
shell脚本
出现原因:windows上写的脚本,直接拷贝到linux系统上运行由于格式不兼容导致
解决办法:
1. 比如文件名为myshell.sh,vim myshell.sh
2. 执行vim中的命令 : set ff?查看文件格式,如果显示fileformat=dos,证明文件格式有问题
3. 执行vim中的命令 :set fileformat=unix 将文件格式改过来就可以了,然后:w
高一上学期难记忆单词
dcj3sjt126com
word english
honest 诚实的;正直的
argue 争论
classical 古典的
hammer 锤子
share 分享;共有
sorrow 悲哀;悲痛
adventure 冒险
error 错误;差错
closet 壁橱;储藏室
pronounce 发音;宣告
repeat 重做;重复
majority 大多数;大半
native 本国的,本地的,本国
hibernate查询返回DTO对象,DTO封装了多个pojo对象的属性
frankco
POJO hibernate查询 DTO
DTO-数据传输对象;pojo-最纯粹的java对象与数据库中的表一一对应。
简单讲:DTO起到业务数据的传递作用,pojo则与持久层数据库打交道。
有时候我们需要查询返回DTO对象,因为DTO
Partition List
hcx2013
partition
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of th
Spring MVC测试框架详解——客户端测试
jinnianshilongnian
上一篇《Spring MVC测试框架详解——服务端测试》已经介绍了服务端测试,接下来再看看如果测试Rest客户端,对于客户端测试以前经常使用的方法是启动一个内嵌的jetty/tomcat容器,然后发送真实的请求到相应的控制器;这种方式的缺点就是速度慢;自Spring 3.2开始提供了对RestTemplate的模拟服务器测试方式,也就是说使用RestTemplate测试时无须启动服务器,而是模拟一
关于推荐个人观点
liyonghui160com
推荐系统 关于推荐个人观点
回想起来,我也做推荐了3年多了,最近公司做了调整招聘了很多算法工程师,以为需要多么高大上的算法才能搭建起来的,从实践中走过来,我只想说【不是这样的】
第一次接触推荐系统是在四年前入职的时候,那时候,机器学习和大数据都是没有的概念,什么大数据处理开源软件根本不存在,我们用多台计算机web程序记录用户行为,用.net的w
不间断旋转的动画
pangyulei
动画
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M
自定义annotation
sha1064616837
java enum annotation reflect
对象有的属性在页面上可编辑,有的属性在页面只可读,以前都是我们在页面上写死的,时间一久有时候会混乱,此处通过自定义annotation在类属性中定义。越来越发现Java的Annotation真心很强大,可以帮我们省去很多代码,让代码看上去简洁。
下面这个例子 主要用到了
1.自定义annotation:@interface,以及几个配合着自定义注解使用的几个注解
2.简单的反射
3.枚举
Spring 源码
up2pu
spring
1.Spring源代码
https://github.com/SpringSource/spring-framework/branches/3.2.x
注:兼容svn检出
2.运行脚本
import-into-eclipse.bat
注:需要设置JAVA_HOME为jdk 1.7
build.gradle
compileJava {
sourceCompatibilit
利用word分词来计算文本相似度
yangshangchuan
word word分词 文本相似度 余弦相似度 简单共有词
word分词提供了多种文本相似度计算方式:
方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度
实现类:org.apdplat.word.analysis.CosineTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 =