python 巡检报告中的邮件处理

00.创作背景,在每天的巡检报告中要 要检查oa相关服务器的备份作业是否备份成功

     那个备份软件有个功能,就是完成备份作业后,可以发送信息到我的邮箱。

01.通过检查我邮箱的信息,就可以了解那个备份作业的情况。

通过解释邮件的名称可以了解备份作业的名称。

通过解释邮件的内容可以得知作业是否完成,因为备份作业前会发一封邮件告诉我备份作业开始的。当备份作业完成后也会发一封邮件显示作业完成。

这样可以间接对备份作业进行一个跟踪。

因为邮件的内容是一种接近于html的格式,所以要编写一个方法对内容进行解释,获取自己想要的内容。

03.备份作业分为每天,每周,每月。

        首先讲一下每天,执行备份作业时间,从早上到晚上都有的。而我检查邮箱的时间是早上9点左右,所以对于一些晚上10点才执行的备份作业,我只检查昨天的未读邮件。有些作业超过24小时的,我直接检查两天。

        之后是每周,检查时间最长跨度是7天,但有时周五夜易的备份作业,周五的早上检查不出来,那我就把检查时间的跨度改为8天。

        每月同理,但要计算每月每一个周六,周日的时间,每月第二个周六,周日的时间。

例如:今个月没有到第一个周六,就显示上个月第一个周六。

'''000导入包'''
#01邮件的api
'''收邮件的包'''
import imaplib
'''邮件的工具'''
import email.utilsfrom html import unescape as un
#02.解释html的包
# 
# import date_util as du
# import read_html as rh
# import bk_job_info as bji'''读取html的包,用来解释html'''
import util.read_html as rh
'''处理日期的包'''
import util.date_util as du
'''保存账号信息的包'''
import entity.ssh_info as si#03.导入修改时间格式的类
from datetime import datetime, timedelta
#04.导入保存作业信息的包
'''100.这个是变量'''
#获取imap的信息 例如:'imap.163.com'
imap=si.ssh_access().imap
#获取我邮箱的密码
email_pwd=si.ssh_access().email_pwd
#获取我邮箱的账号
email_my_account=si.ssh_access().emal_my_account
#这是发件人的账号,这个是固定的
email_bk_account=si.ssh_access().email_bk_account# 101.设置时间范围
'''因为有时时间跨度在1天多一点,所以时间定在2天前'''
since = (datetime.now() - timedelta(days=2)).strftime('%d-%b-%Y')  # 2天前
'''同上,但这个时间跨度为7天'''
week = (datetime.now() - timedelta(days=7)).strftime('%d-%b-%Y')  # 7天前before = datetime.now().strftime('%d-%b-%Y')  # 现在
now=datetime.now().strftime("%Y-%m-%d") #例如  获取系统当前时间,并以2024-04-18格式显示
yesterday=(datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d') keyword_every_day="每天"
today=0 #判断当天的增量备份是否成功
def check_today_backup(imap,email_my_account,email_pwd,job_name
):'''200.业务逻辑'''# 201.连接到邮箱服务器mail = imaplib.IMAP4_SSL(imap)pwd = email_pwd# 202.登录邮箱(这个要隐藏)mail.login(email_my_account, pwd)# 203选择邮箱文件夹mail.select('INBOX')# 204.搜索符合条件的邮件"""status, data = mail.search(None, 'ALL')  """# 搜索所有邮件"""status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件# 205.近一天未读邮件status, data = mail.search(None, '(UNSEEN)'.format(since,before))  # 搜索未读邮件if status == 'OK':# 获取邮件id列表email_ids = data[0].split()split_list=""return_list=[]# 遍历邮件id列表for email_id in email_ids:# 根据邮件id获取邮件内容status, data = mail.fetch(email_id, '(RFC822)')raw_email = data[0][1]# 解析原始邮件内容msg = email.message_from_bytes(raw_email)body = None# 判断邮件内容类型if msg.is_multipart():for part in msg.get_payload():if part.get_content_type() == 'text/plain':body = part.get_payload(decode=True).decode('utf-8')else:body = msg.get_payload(decode=True).decode('utf-8')plain_text = un(body)# print('正文内容:', plain_text)content=rh.explain_html(plain_text)# print("content的值:")# print(content)for i in content:split_list = i.split(":")if split_list[1]=="作业完成。":if now in content[8]:if content[0].split(":")[1]==job_name:return_list.append(True)return_list.append(content[0].split(":")[1])return_list.append(content[8][5:])return return_list#作业结束时间# 关闭连接mail.close()mail.logout()#检查昨天的备份
def check_yesterday_backup(imap,email_my_account,email_pwd,job_name
):'''200.业务逻辑'''# 201.连接到邮箱服务器mail = imaplib.IMAP4_SSL(imap)pwd = email_pwd# 202.登录邮箱(这个要隐藏)mail.login(email_my_account, pwd)# 203选择邮箱文件夹mail.select('INBOX')# 204.搜索符合条件的邮件"""status, data = mail.search(None, 'ALL')  """# 搜索所有邮件"""status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件# 205.近一天未读邮件status, data = mail.search(None, '(UNSEEN)'.format(since,before))  # 搜索未读邮件# 获取邮件id列表email_ids = data[0].split()split_list=""return_list=[]# 遍历邮件id列表for email_id in email_ids:# 根据邮件id获取邮件内容status, data = mail.fetch(email_id, '(RFC822)')raw_email = data[0][1]# 解析原始邮件内容msg = email.message_from_bytes(raw_email)body = None# 判断邮件内容类型if msg.is_multipart():for part in msg.get_payload():if part.get_content_type() == 'text/plain':body = part.get_payload(decode=True).decode('utf-8')else:body = msg.get_payload(decode=True).decode('utf-8')plain_text = un(body)# print('正文内容:', plain_text)content=rh.explain_html(plain_text)# print("content的值:")# print(content)for i in content:split_list = i.split(":")if split_list[1]=="作业完成。":# print("yesterday的值:")# print(yesterday)# print("content[8]的值 是开始时间")# print(content[8])if yesterday in content[8]:if content[0].split(":")[1]==job_name:# print("这里能执行?")return_list.append(True)return_list.append(content[0].split(":")[1])return_list.append(content[8][5:])# print(return_list)return return_list#作业结束时间# 关闭连接mail.close()mail.logout()#检查每周的全量备份
def check_week_full_backup(imap,email_my_account,email_pwd,job_name):'''200.业务逻辑'''# 201.连接到邮箱服务器mail = imaplib.IMAP4_SSL(imap)pwd = email_pwd# 202.登录邮箱(这个要隐藏)mail.login(email_my_account, pwd)# 203选择邮箱文件夹mail.select('INBOX')# 204.搜索符合条件的邮件"""status, data = mail.search(None, 'ALL')  """# 搜索所有邮件"""status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件# 205.近一周未读邮件,搜索条件不起效status, data = mail.search(None, '(UNSEEN SINCE{})'.format(week))  # 搜索未读邮件# 获取邮件id列表email_ids = data[0].split()split_list=""return_list=[]# 遍历邮件id列表for email_id in email_ids:# 根据邮件id获取邮件内容status, data = mail.fetch(email_id, '(RFC822)')raw_email = data[0][1]# 解析原始邮件内容msg = email.message_from_bytes(raw_email)body = None# 判断邮件内容类型if msg.is_multipart():for part in msg.get_payload():if part.get_content_type() == 'text/plain':body = part.get_payload(decode=True).decode('utf-8')else:body = msg.get_payload(decode=True).decode('utf-8')plain_text = un(body)# print('正文内容:', plain_text)content=rh.explain_html(plain_text)# print("content的值:")# print(content)for i in content:split_list = i.split(":")# print("content的值")# print(content)if split_list[1]=="作业完成。":# print("这是周的")# print("content的值")# print(content)# print("yesterday的值:")# print(yesterday)# print("content[8]的值")# print(content[8].split("T")[0].split(":")[1])recent_time=content[8].split("T")[0].split(":")[1]# 判断今天是不是周五isFri=du.isFriday()isMon=du.isMonday()# if isFri==True or isMon==True:if isFri==True:# print("today的值")#如果今天是周五,参数是8today=8# print(today)else:# print("today的值")today=7#如果今天不是周五,参数是7# print(today)if du.days_in_recently(recent_time,today):# print("content的值")# print(content)if content[0].split(":")[1]==job_name:# print("这里能执行?")# print("content的值")# print(content)# print("job_name")# print(content[0].split(":")[1])# print("job_name")# print(job_name)return_list.append(True)return_list.append(content[0].split(":")[1])return_list.append(content[8][5:])# print("return_list的值")# print(return_list)return return_list#作业结束时间if content[0].split(":")[1]=='OA_apache3_每周一全备' and content[8][5:].split("T")[0]==now:# print("test 2024-5-27")# print("content的值")# print(content)# print("job_name")# print(content[0].split(":")[1])# print("job_name")# print(job_name)return_list.append(True)return_list.append(content[0].split(":")[1])return_list.append(content[8][5:])# print("return_list的值")# print(return_list)return return_list# 关闭连接mail.close()mail.logout()#day_gaps= 每个月第一个周六  每个月第一个周日 每个月第二个周六 每个月第二个周日
#控制查询未读邮件的范围#检查每月的全量备份
def check_month_full_backup(imap,email_my_account,email_pwd,job_name,day_gaps):
# 200.业务逻辑# 201.连接到邮箱服务器mail = imaplib.IMAP4_SSL(imap)pwd = email_pwd# 202.登录邮箱(这个要隐藏)mail.login(email_my_account, pwd)# 203选择邮箱文件夹mail.select('INBOX')# 204.搜索符合条件的邮件"""status, data = mail.search(None, 'ALL')  """# 搜索所有邮件"""status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件# 205.近一个月未读邮件status, data = mail.search(None, '(UNSEEN)'.format(day_gaps,before))  # 搜索未读邮件# 获取邮件id列表if status == 'OK':email_ids = data[0].split()split_list=""return_list=[]# 遍历邮件id列表for email_id in email_ids:# 根据邮件id获取邮件内容status, data = mail.fetch(email_id, '(RFC822)')raw_email = data[0][1]# 解析原始邮件内容msg = email.message_from_bytes(raw_email)body = None# 判断邮件内容类型if msg.is_multipart():for part in msg.get_payload():if part.get_content_type() == 'text/plain':body = part.get_payload(decode=True).decode('utf-8')else:body = msg.get_payload(decode=True).decode('utf-8')plain_text = un(body)# print('正文内容:', plain_text)content=rh.explain_html(plain_text)# print("content的值:")# print(content)for i in content:split_list = i.split(":")# print("content的值")# print(content)# print("split_list[1]的类型")# print(type(split_list[1]))# print("now的类型")# print(type(now))#如果含有作业开始,标记为已读if split_list[1]=="作业开始。":mail.store(email_id,'+FLAGS', '\\Seen')#如果含有每天且不含有今天,昨天日期的,标记为已读if keyword_every_day in split_list[1] and now not in content[8] and yesterday not in content[8]:mail.store(email_id,'+FLAGS', '\\Seen')if split_list[1]=="作业完成。":# print("content的值")# print(content)# print("yesterday的值:")# print(yesterday)# print("content[8]的值 是开始时间")# print(content[8])if content[0].split(":")[1]==job_name:# print("这里能执行?")return_list.append(True)return_list.append(content[0].split(":")[1])return_list.append(content[8][5:])# print("return_list的值")# print(return_list)return return_list#作业结束时间# 关闭连接mail.close()mail.logout()def check_backup(imap,email_my_account,email_pwd,job_name_list #工作名的列表
):'''200.业务逻辑'''# 201.连接到邮箱服务器mail = imaplib.IMAP4_SSL(imap)pwd = email_pwd# 202.登录邮箱(这个要隐藏)mail.login(email_my_account, pwd)# 203选择邮箱文件夹mail.select('INBOX')# 204.搜索符合条件的邮件"""status, data = mail.search(None, 'ALL')  """# 搜索所有邮件"""status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件# 205.近一天未读邮件status, data = mail.search(None, '(UNSEEN)'.format(since,before))  # 搜索未读邮件if status == 'OK':# 获取邮件id列表email_ids = data[0].split()split_list=""return_list=[]return_list_list=[]# 遍历邮件id列表for email_id in email_ids:# 根据邮件id获取邮件内容status, data = mail.fetch(email_id, '(RFC822)')raw_email = data[0][1]# 解析原始邮件内容msg = email.message_from_bytes(raw_email)body = None# 判断邮件内容类型if msg.is_multipart():for part in msg.get_payload():if part.get_content_type() == 'text/plain':body = part.get_payload(decode=True).decode('utf-8')else:body = msg.get_payload(decode=True).decode('utf-8')plain_text = un(body)# print('正文内容:', plain_text)content=rh.explain_html(plain_text)# print("content的值:")# print(content)for i in content:split_list = i.split(":")#限制了是作业完成if split_list[1]=="作业完成。":#限制了是今天if now in content[8]:for job_name in job_name_list:if "每天" in job_name:if content[0].split(":")[1]==job_name:return_list.append(True)return_list.append(content[0].split(":")[1])return_list.append(content[8][5:])return_list_list.append(return_list)return return_list_list#作业结束时间# 关闭连接mail.close()mail.logout()#20240604
def month_ago_already_read(imap,email_my_account,email_pwd# job_name_list #工作名的列表
):mail = imaplib.IMAP4_SSL(imap)mail.login(email_my_account,email_pwd)mail.select('INBOX')one_month_ago = datetime.now()-timedelta(days=40)one_month_ago_str = one_month_ago.strftime('%d-%b-%Y')status, messages = mail.search(None, '(BEFORE {date})'.format(date=one_month_ago_str))if messages:# 将搜索到的邮件标记为已读for msg_id in messages[0].split():mail.store(msg_id, '+FLAGS', '\\Seen')# 关闭连接mail.close()mail.logout()def change_mail_seen( imap,email_my_account,email_pwd):mail = imaplib.IMAP4_SSL(imap)mail.login(email_my_account,email_pwd)# 选择收件箱mail.select('inbox')# 搜索邮件,使用(UNSEEN)只获取未读邮件status, messages = mail.search(None, 'UNSEEN')# 解析邮件信息,获取邮件的UIDif messages:# 获取邮件的UID列表mail_ids = messages[0].split()# 遍历邮件UID列表,获取每封邮件的标题for mail_id in mail_ids:# 获取邮件的标题status, data = mail.fetch(mail_id, '(RFC822.HEADER)')if status == 'OK':# 解析邮件头部信息,提取标题header = data[0][1].decode('utf-8')# 打印邮件标题# print(header)     # print(header.split('\n')[0])#首先过滤发件人是jiankong@lw.gov.cnif email_bk_account in header:if "每日" in header:for row in header.split('\n'):if "Subject" in row:print(row)if "Date" in row:date_str=row.replace("Date: ","")datetime_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S +0800 (CST) ")# 按照年月日的格式输出date_formatted = datetime_obj.strftime("%Y-%m-%d")# print(date_formatted)# print("4天的值:")# print(du.acount_date(4))# print("2天的值")# print(du.acount_date(2))# print("列表")# print(du.generate_date_range(du.acount_date(4),du.acount_date(2)))if date_formatted in du.generate_date_range(du.acount_date(4),du.acount_date(2)):mail.store(mail_id, '+FLAGS', '\\SEEN')# print("ok")# print(date_formatted)if "每天" in header:for row in header.split('\n'):if "Subject" in row:print(row)if "Date" in row:date_str=row.replace("Date: ","")datetime_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S +0800 (CST) ")# 按照年月日的格式输出date_formatted = datetime_obj.strftime("%Y-%m-%d")# print(date_formatted)# print("4天的值:")# print(du.acount_date(4))# print("2天的值")# print(du.acount_date(2))# print("列表")# print(du.generate_date_range(du.acount_date(4),du.acount_date(2)))if date_formatted in du.generate_date_range(du.acount_date(4),du.acount_date(2)):mail.store(mail_id, '+FLAGS', '\\SEEN')# print("ok")# print(date_formatted)if "每周" in header:for row in header.split('\n'):if "Subject" in row:print(row)if "Date" in row:date_str=row.replace("Date: ","")datetime_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S +0800 (CST) ")date_formatted = datetime_obj.strftime("%Y-%m-%d")# print(date_formatted)# print("14天的值:")# print(du.acount_date(14))# print("7天的值")# print(du.acount_date(7))# print("列表")# print(du.generate_date_range(du.acount_date(14),du.acount_date(7)))if date_formatted in du.generate_date_range(du.acount_date(14),du.acount_date(7)):mail.store(mail_id, '+FLAGS', '\\SEEN')# print("ok")# print(date_formatted)if "每月" in header:for row in header.split('\n'):if "Subject" in row:print(row)if "Date" in row:date_str=row.replace("Date: ","")datetime_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S +0800 (CST) ")date_formatted = datetime_obj.strftime("%Y-%m-%d")# print(date_formatted)# print("14天的值:")# print(du.acount_date(58))# print("7天的值")# print(du.acount_date(28))# print("列表")# print(du.generate_date_range(du.acount_date(58),du.acount_date(28)))if date_formatted in du.generate_date_range(du.acount_date(58),du.acount_date(28)):mail.store(mail_id, '+FLAGS', '\\SEEN')# print("ok")# print(date_formatted)# 关闭连接mail.close()mail.logout()if __name__ == '__main__':# # 创建固定范围的列表# start_date = datetime.strptime('2020-01-01', '%Y-%m-%d')# end_date = datetime.strptime('2020-12-31', '%Y-%m-%d')# date_range = generate_date_range(start_date, end_date)# print(date_range)imap=si.ssh_access().imapemail_pwd=si.ssh_access().email_pwdemail_my_account=si.ssh_access().emal_my_accountemail_bk_account=si.ssh_access().email_bk_account# get_mail_name(#     imap,#     email_my_account,#     email_pwd)change_mail_seen(imap,email_my_account,email_pwd)# # # day_backs=check_backup(#     imap,#     email_my_account,#     email_pwd,#     bji.job_info().job_name_list# )# print(day_backs)'''月全备'''# cmfb=check_month_full_backup(#     imap,#     email_my_account,#     email_pwd,#     bji.job_info().check_month_full_status["oadoc2_full_status"],#     day_gaps# )# print(cmfb)'''增备'''# oracle_append_status_is_ok=check_today_backup(# imap,# email_my_account,# email_pwd,# bji.job_info().check_today_append_status['oracle_append_status'])# print("获取是否成功")# print(oracle_append_status_is_ok)# oa_middleware_full_is_ok=check_week_full_backup(# imap,# email_my_account,# email_pwd,# # bji.job_info().check_week_full_status['oa_middleware_full_status'])# bji.job_info().check_week_full_status['oa_apche3_full_status'])# print("获取是否成功")# print(oa_middleware_full_is_ok)'''
这个是例如
content的值:
[
'作业:Oracle每日增量备', 
'级别:INFO', 
'主机:荔湾区通用OA系统-数据库',
'地址:10.108.183.19',
'模块:rac-backup.oracle.linux-x86',
'资源:lwgov1',
'时间:2024-04-19T00:17:15+08:00', 
'开始时间:2024-04-19T00:00:00+08:00',
'结束时间:2024-04-19T00:19:38+08:00', 
'错误码:0x3000103060100002',
'消息:作业完成。']
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一分钟学习数据安全—自主管理身份SSI架构

上一篇我们概要介绍了SSI的几个组成部分,包括可验证凭证信任三角、治理框架等,后面的介绍文章我们将分别介绍一下相关的技术。 SSI的堆栈演进到现在,综合整个生态中的关键架构决策,普遍接受的是一个四层模型。 如上图所示&#xf…

QT系列教程(8) QT 布局学习

简介 Qt 中的布局有三种方式,水平布局,垂直布局,栅格布局。 通过ui设置布局 我们先创建一个窗口应用程序,程序名叫layout,基类选择QMainWindow。但我们不使用这个mainwindow,我们创建一个Qt应用程序类Log…

使用API有效率地管理Dynadot域名,删除已设置的文件夹

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

河南省第十四届ICPC大学生程序设计竞赛-C结对编程

题面 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 A公司是一家主营软件开发的公司。公司内有n名员工,编号为1到n的整数,除了1号老板外每名员工…

用友NC downCourseWare 任意文件读取漏洞复现

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友NC 系统 /portal/pt/downCourseWare…

【Go】编码结构体转换为json字符串

结构体内字段命名大小写问题导致无法解析到 package mainimport ("encoding/json""fmt" ) // 定义一个结构体 type Music struct {name string json:"名称" // 字段大小写命名问题!!!singer string json:&q…

Javascript系统学习(三)

前端模块化前端模块化CommonJS、AMD、CMD、ES6_commonjs amd cmd es6模块化-CSDN博客 ES6: <script type"module" src"main.js"></script> //默认导出 export default function(ctx) {... } ----------------------------------- //模块命名…

创新科技,船舶岸电电源助力环保事业

岸电电源&#xff0c;也称为岸用变频电源或电子静止式岸电电源&#xff0c;是一种特别设计制造的大功率变频电源设备。这种设备主要针对船上、岸边码头等高温、高湿、高腐蚀性、大负荷冲击等恶劣使用环境&#xff0c;能够提供稳定的电源供应。它通常用于将岸边的工业用电&#…

SpringBoot 请求响应

SpringBoot 请求响应 来源于黑马程序员JavaWeb课程&#xff0c;总结笔记 1.ApiFox Apifox快速入门教程 2.基本参数 简单参数&#xff1a;在向服务器发起请求时&#xff0c;向服务器传递的是一些普通的请求数据。 //RequestController.java import jakarta.servlet.http.Htt…

概率分析和随机算法

目录 雇佣问题 概率分析 随机算法 生日悖论 随机算法 概率分析 球与箱子 总结 雇佣问题 有n个候选人面试&#xff0c;如果面试者比目前雇佣者的分数高&#xff0c;评价更好&#xff0c;那么就辞掉当前雇佣者&#xff0c;而去聘用面试者&#xff0c;否则继续面试新的候…

C# Web控件与数据感应之 填充 HtmlTable

目录 关于 HtmlTable HtmlTable与BaseDataList的区别 准备数据源 ​范例运行环境 FillTable 方法 设计与实现 模板样例输出 Automatic 模式填充 ​ DynamicRows 模式填充 StaticRows 模式填充 ​ 小结 关于 HtmlTable 数据感应也即数据捆绑&#xff0c;是…

电商行业为什么要分析竞争商品?详解竞争商品分析八个维度

在当今的电子商务领域&#xff0c;竞争日益激烈&#xff0c;消费者拥有几乎无限的选择。品牌和商家为了在这场竞争中获得优势&#xff0c;必须深入理解市场动态、消费者需求以及竞争对手的策略。分析竞争商品是实现这一目标的关键步骤。它不仅帮助商家揭示行业内表现优异商品的…

【机器学习基础】Python编程03:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

LW-DETR:实时目标检测的Transformer, Apache-2.0 开源可商用,实验超 YOLOv8

LW-DETR&#xff1a;实时目标检测的Transformer&#xff0c; Apache-2.0 开源可商用&#xff0c;实验超 YOLOv8 LW-DETR 架构实例化高效训练高效推理 目的与解法拆解ViT编码器和DETR解码器多级特征图聚合变形交叉注意力窗口注意力和全局注意力 论文&#xff1a;https://arxiv.o…

64. UE5 RPG 创建新的双手攻击怪物

在上一篇文章中&#xff0c;我们实现了新的功能&#xff0c;现在可以创建多个普通攻击动画&#xff0c;并且可以根据你所使用的普通攻击动画&#xff0c;设置不同的攻击位置。比如&#xff0c;你使用武器&#xff0c;那么攻击位置需要从武器上获取&#xff0c;如果你没有持有武…

把文件从一台linux机器上传到另一台linux机器上

文章目录 1&#xff0c;第一种情况1.1 先测试2台机器是否可以互相通信1.2 对整个文件夹里面的所有内容进行传输的命令1.3 检查结果 2&#xff0c;第二种情况2.1&#xff0c;单个文件传输的命令 1&#xff0c;第一种情况 我这里有2台linux机器&#xff0c; 机器A&#xff1a;19…

高科技IT企业适合平滑替代FTP升级方案有哪些?

随着信息技术的飞速发展&#xff0c;传统的文件传输协议FTP已经逐渐不能满足现代企业的需求。特别是对于高科技IT企业来说&#xff0c;他们需要的不仅仅是一个简单的文件传输工具&#xff0c;而是一个能够提供高速、安全、稳定、易管理且兼容性强的解决方案。那么&#xff0c;在…

数学建模 —— 聚类分析(3)

目录 一、聚类分析概述 1.1 常用聚类要素的数据处理 1.1.1 总和标准化 1.1.2 标准差标准化 1.1.3 极大值标准化 1.1.4 极差的标准化 1.2 分类 1.2.1 快速聚类法&#xff08;K-均值聚类&#xff09; 1.2.2 系统聚类法&#xff08;分层聚类法&#xff09; 二、分类统计…

AutoMQ 生态集成 Tigris

Tigris[1]是一个全球分布式的兼容 S3 的对象存储服务&#xff0c;它允许你存储和访问任意数量的数据&#xff0c;具有广泛的使用场景。Tigris 会自动且智能地将数据分布到靠近用户的位置&#xff0c;让用户无需担心数据复制和缓存复杂性。 你可以将 Tigris 用于多种场景&#x…

快速排序——AcWing785.快速排序

AcWing785.快速排序 题目描述 785. 快速排序 - AcWing题库 运行代码 #include <iostream> #include <algorithm> using namespace std; const int N 1e66; int q[N]; void quick_sort(int q[], int l, int r) {if (l > r) return;int m l r >> 1;//…