python 做成Excel并设置打印区域

记录首次用python处理Excel表格的过程。

参考文章:https://www.jianshu.com/p/5e00dc2c9f4c

程序要做的事情:

1. copy 模板文件到 output 文件夹并重命名为客户指定的文件名
2. 从 DB 查询数据并将数据写入 Excel
3. 写数据的同时, 设置每个单元格的样式
4. 设置打印区域

# -*- encoding: utf-8 -*-import utils.util as util
from database import sns_db
from logger import init_log, sns_logger
import time
from config.config import log_level_args, env_args
import sys
import os
import shutil
from datetime import datetime
from openpyxl import load_workbook
from openpyxl.styles import Font, Color, PatternFill, Border, Side, Alignment
import win32com.clientsys.path.append('../')def run(client_cds, start_date, end_date):""":param client_cds::param start_date::param end_date::return:"""try:# connect dbsns_db.connect(client_cds)# get client infoclient_info = sns_db.get_clients_by_cds(in_clients)if len(client_info) < 1:sns_logger.error("No such client [%s] !!!" % in_clients)returnclient_name = client_info[0]['client_name']report_month = start_date[:7].replace("-", "")records = sns_db.get_report_data(client_cds, start_date, end_date)# 模板文件的路径template_to_client_path     = os.getcwd() + '/report/template/template-to-client.xlsx'template_chartgtp_path      = os.getcwd() + '/report/template/template_chartGTP.xlsm'# 获取当前日期并格式化为字符串(例如:'2023-10-23')today = datetime.now().strftime('%Y-%m-%d')# 新文件的路径(使用当前日期作为文件名的一部分)new_file_to_client_path     = os.getcwd() + f'/report/output/【{client_name}】月次レポート{report_month}.xlsx'new_file_chartgtp_path      = os.getcwd() + f'/report/output/【{client_name}】月次レポート{report_month}_chatGTP.xlsx'# 复制模板文件shutil.copy2(template_to_client_path, new_file_to_client_path)shutil.copy2(template_chartgtp_path, new_file_chartgtp_path)# 现在我们可以打开新文件并处理数据# to_client fileworkbook_to_client  = load_workbook(new_file_to_client_path)sheet_to_client     = workbook_to_client['sheet1']# chatGPT fileworkbook_chatgpt    = load_workbook(new_file_chartgtp_path)sheet_chatgpt       = workbook_chatgpt['sheet1']# 设置边框样式,这里使用蓝色边框thin_border = Border(left=Side(border_style='thin', color='0070C0'),right=Side(border_style='thin', color='0070C0'),top=Side(border_style='thin', color='0070C0'),bottom=Side(border_style='thin', color='0070C0'))# 对齐方式: 水平居中 垂直居中alignment_center = Alignment(horizontal='center', vertical='center')# 对齐方式: 垂直居中vertical_center = Alignment(vertical='center')# 自动换行wrap_text_true = Alignment(wrap_text=True)# Fontfont_style = Font(name='Yu Gothic UI', size=11)row_cnt = len(records)# 插入数据for i in range(row_cnt):current_row = records[i]row_idx = i + 3# A列 NOcolumn_a = 'A' + str(row_idx)sheet_to_client[column_a] = '=ROW()-2'sheet_chatgpt[column_a] = '=ROW()-2'sheet_to_client[column_a].border = thin_border  # 设置边框sheet_chatgpt[column_a].border = thin_border  # 设置边框sheet_to_client[column_a].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_a].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_to_client[column_a].font = font_style   # Fontsheet_chatgpt[column_a].font = font_style   # Font# B列 対象日column_b = 'B' + str(row_idx)obj_date = str(current_row['date']).replace("-", "/")sheet_to_client[column_b] = obj_datesheet_chatgpt[column_b] = obj_datesheet_to_client[column_b].border = thin_border  # 设置边框sheet_chatgpt[column_b].border = thin_border  # 设置边框sheet_to_client[column_b].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_b].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_to_client[column_b].font = font_style   # Fontsheet_chatgpt[column_b].font = font_style   # Font# C列 投稿時刻column_c = 'C' + str(row_idx)obj_time = current_row['time']sheet_to_client[column_c] = obj_timesheet_chatgpt[column_c] = obj_timesheet_to_client[column_c].border = thin_border  # 设置边框sheet_chatgpt[column_c].border = thin_border  # 设置边框sheet_to_client[column_c].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_c].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_to_client[column_c].font = font_style   # Fontsheet_chatgpt[column_c].font = font_style   # Font# D列 URLcolumn_d = 'D' + str(row_idx)url = current_row['url']sheet_to_client[column_d] = urlsheet_chatgpt[column_d] = urlsheet_to_client[column_d].border = thin_border  # 设置边框sheet_chatgpt[column_d].border = thin_border  # 设置边框sheet_to_client[column_d].alignment  = vertical_center  # 垂直居中sheet_chatgpt[column_d].alignment  = vertical_center  # 垂直居中sheet_to_client[column_d].font = font_style   # Fontsheet_chatgpt[column_d].font = font_style   # Font# E列 タイトルcolumn_e = 'E' + str(row_idx)if current_row['category'] != "yelp":# yelp no titletitle = current_row['title']sheet_to_client[column_e]   = titlesheet_chatgpt[column_e]     = titlesheet_to_client[column_e].border = thin_border  # 设置边框sheet_chatgpt[column_e].border = thin_border  # 设置边框sheet_to_client[column_e].alignment  = vertical_center  # 垂直居中sheet_chatgpt[column_e].alignment  = vertical_center  # 垂直居中sheet_to_client[column_e].font = font_style   # Fontsheet_chatgpt[column_e].font = font_style   # Font# F列 サイトカテゴリcolumn_f = 'F' + str(row_idx)category = current_row['category'] + "検索結果"sheet_to_client[column_f]   = categorysheet_chatgpt[column_f]     = categorysheet_to_client[column_f].border = thin_border  # 设置边框sheet_chatgpt[column_f].border = thin_border  # 设置边框sheet_to_client[column_f].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_f].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_to_client[column_f].font = font_style   # Fontsheet_chatgpt[column_f].font = font_style   # Font# G列 ユーザー名column_g = 'G' + str(row_idx)user_name = current_row['user_name']sheet_to_client[column_g]   = user_namesheet_chatgpt[column_g]     = user_namesheet_to_client[column_g].border = thin_border  # 设置边框sheet_chatgpt[column_g].border = thin_border  # 设置边框sheet_to_client[column_g].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_g].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_to_client[column_g].font = font_style   # Fontsheet_chatgpt[column_g].font = font_style   # Font# H列 抜粋文column_h = 'H' + str(row_idx)content = current_row['content']sheet_to_client[column_h]   = contentsheet_chatgpt[column_h]     = contentsheet_to_client[column_h].border = thin_border  # 设置边框sheet_chatgpt[column_h].border = thin_border  # 设置边框sheet_to_client[column_h].alignment  = vertical_center  # 垂直居中sheet_chatgpt[column_h].alignment  = vertical_center  # 垂直居中sheet_to_client[column_h].alignment  = wrap_text_true  # 自动换行sheet_chatgpt[column_h].alignment  = wrap_text_true  # 自动换行sheet_to_client[column_h].font = font_style   # Fontsheet_chatgpt[column_h].font = font_style   # Font# I列 自動翻訳column_i = 'I' + str(row_idx)sheet_to_client[column_i]   = ""# 判断语言, 非日语的才翻译if current_row['lang'] == 'Japanese':sheet_chatgpt[column_i] = contentelse:sheet_chatgpt[column_i] = f'=ChatGPT("将评论翻译成日语 " & H{row_idx})'sheet_to_client[column_i].border = thin_border  # 设置边框sheet_chatgpt[column_i].border = thin_border  # 设置边框sheet_to_client[column_i].alignment  = vertical_center  # 垂直居中sheet_chatgpt[column_i].alignment  = vertical_center  # 垂直居中sheet_to_client[column_i].alignment  = wrap_text_true  # 自动换行sheet_chatgpt[column_i].alignment  = wrap_text_true  # 自动换行sheet_to_client[column_i].font = font_style   # Fontsheet_chatgpt[column_i].font = font_style   # Font# J列 レベルcolumn_j = 'J' + str(row_idx)sheet_to_client[column_j]   = f'= IF(COUNTIF(U{row_idx}, "*positive*")>0, "ポジティブ", "ネガティブ")'sheet_chatgpt[column_j]     = f'= IF(COUNTIF(U{row_idx}, "*positive*")>0, "ポジティブ", "ネガティブ")'sheet_to_client[column_j].border = thin_border  # 设置边框sheet_chatgpt[column_j].border = thin_border  # 设置边框sheet_to_client[column_j].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_j].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_to_client[column_j].font = font_style   # Fontsheet_chatgpt[column_j].font = font_style   # Font# K列 商品関連column_k = 'K' + str(row_idx)sheet_to_client[column_k]   = f'= IF(COUNTIF(U{row_idx}, "*商品関連*")>0, "●", "")'sheet_chatgpt[column_k]     = f'= IF(COUNTIF(U{row_idx}, "*商品関連*")>0, "●", "")'sheet_to_client[column_k].border = thin_border  # 设置边框sheet_chatgpt[column_k].border = thin_border  # 设置边框sheet_to_client[column_k].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_k].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# L列 接客関連column_l = 'L' + str(row_idx)sheet_to_client[column_l]   = f'= IF(COUNTIF(U{row_idx}, "*接客関連*")>0, "●", "")'sheet_chatgpt[column_l]     = f'= IF(COUNTIF(U{row_idx}, "*接客関連*")>0, "●", "")'sheet_to_client[column_l].border = thin_border  # 设置边框sheet_chatgpt[column_l].border = thin_border  # 设置边框sheet_to_client[column_l].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_l].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# M列 店舗関連column_m = 'M' + str(row_idx)sheet_to_client[column_m]   = f'= IF(COUNTIF(U{row_idx}, "*店舗関連*")>0, "●", "")'sheet_chatgpt[column_m]     = f'= IF(COUNTIF(U{row_idx}, "*店舗関連*")>0, "●", "")'sheet_to_client[column_m].border = thin_border  # 设置边框sheet_chatgpt[column_m].border = thin_border  # 设置边框sheet_to_client[column_m].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_m].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# N列 在庫関連column_n = 'N' + str(row_idx)sheet_to_client[column_n]   = f'= IF(COUNTIF(U{row_idx}, "*在庫関連*")>0, "●", "")'sheet_chatgpt[column_n]     = f'= IF(COUNTIF(U{row_idx}, "*在庫関連*")>0, "●", "")'sheet_to_client[column_n].border = thin_border  # 设置边框sheet_chatgpt[column_n].border = thin_border  # 设置边框sheet_to_client[column_n].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_n].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# O列 在庫関連column_o = 'O' + str(row_idx)sheet_to_client[column_o]   = f'= IF(COUNTIF(U{row_idx}, "*労務関連*")>0, "●", "")'sheet_chatgpt[column_o]     = f'= IF(COUNTIF(U{row_idx}, "*労務関連*")>0, "●", "")'sheet_to_client[column_o].border = thin_border  # 设置边框sheet_chatgpt[column_o].border = thin_border  # 设置边框sheet_to_client[column_o].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_o].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# P列 トラブル関連column_p = 'P' + str(row_idx)sheet_to_client[column_p]   = f'= IF(COUNTIF(U{row_idx}, "*トラブル関連*")>0, "●", "")'sheet_chatgpt[column_p]     = f'= IF(COUNTIF(U{row_idx}, "*トラブル関連*")>0, "●", "")'sheet_to_client[column_p].border = thin_border  # 设置边框sheet_chatgpt[column_p].border = thin_border  # 设置边框sheet_to_client[column_p].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_p].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# Q列 著作権侵害関連column_q = 'Q' + str(row_idx)sheet_to_client[column_q]   = f'= IF(COUNTIF(U{row_idx}, "*著作権侵害関連*")>0, "●", "")'sheet_chatgpt[column_q]     = f'= IF(COUNTIF(U{row_idx}, "*著作権侵害関連*")>0, "●", "")'sheet_to_client[column_q].border = thin_border  # 设置边框sheet_chatgpt[column_q].border = thin_border  # 设置边框sheet_to_client[column_q].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_q].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# R列 下請法関連column_r = 'R' + str(row_idx)sheet_to_client[column_r] = f'= IF(COUNTIF(U{row_idx}, "*下請法関連*")>0, "●", "")'sheet_chatgpt[column_r] = f'= IF(COUNTIF(U{row_idx}, "*下請法関連*")>0, "●", "")'sheet_to_client[column_r].border = thin_border  # 设置边框sheet_chatgpt[column_r].border = thin_border  # 设置边框sheet_to_client[column_r].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_r].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# S列 その他column_s = 'S' + str(row_idx)sheet_to_client[column_s] = f'= IF(COUNTIF(U{row_idx}, "*その他*")>0, "●", "")'sheet_chatgpt[column_s] = f'= IF(COUNTIF(U{row_idx}, "*その他*")>0, "●", "")'sheet_to_client[column_s].border = thin_border  # 设置边框sheet_chatgpt[column_s].border = thin_border  # 设置边框sheet_to_client[column_s].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中sheet_chatgpt[column_s].alignment  = alignment_center  # 对齐方式: 水平居中 垂直居中# U列 chatGPT 分类的列column_u = 'U' + str(row_idx)sheet_to_client[column_u] = f''sheet_chatgpt[column_u] = f'=ChatGPT($U$1 & H{row_idx})'# 保存修改后的Excel文件workbook_to_client.save(new_file_to_client_path)workbook_chatgpt.save(new_file_chartgtp_path)# 设置打印区域# 参考文档: https://www.jianshu.com/p/75eb9342da59end_row = row_cnt + 2excel_app = win32com.client.Dispatch('Excel.Application')excel_app.Visible = Falseexcel_app.DisplayAlerts = Falsewb = excel_app.Workbooks.Open(new_file_to_client_path)ws = wb.Activesheetws.PageSetup.PrintArea = f"$A$2:$S${end_row}"wb.Save()excel_app.Quit()sns_logger.info(f'文件已创建并处理:{new_file_to_client_path}')sns_logger.info(f'文件已创建并处理:{new_file_chartgtp_path}')except Exception as e:sns_logger.error(e)return Falseif __name__ == '__main__':start_time = time.time()  # 记录开始时间# in_clientsin_clients = sys.argv[1].lower()# init loginit_log(in_clients, 'report')# set log levelconf_env = env_argslog_level = log_level_args[conf_env]sns_logger.setLevel(log_level)sns_logger.info("==========  Task Start!!!  ==========")sns_logger.info("clinet_cds: {}".format(in_clients))if len(sys.argv) < 4:sns_logger.error("params not enough, please check your params")exit()# in_start_datein_start_date = sys.argv[2]sns_logger.info("start_date: {},".format(in_start_date))if not util.is_valid_date(in_start_date):sns_logger.error("invalid start_date: {}, date format should be yyyy-mm-dd".format(in_start_date))exit()# in_end_datein_end_date = sys.argv[3]sns_logger.info("end_date: {}".format(in_end_date))if not util.is_valid_date(in_end_date):sns_logger.error("invalid end_date: {}, date format should be yyyy-mm-dd".format(in_end_date))exit()run(in_clients, in_start_date, in_end_date)sns_logger.info("==========  Task End!!!  ==========")end_time = time.time()  # 记录结束时间execution_time = end_time - start_timesns_logger.info("run(%s, %s, %s)" % (in_clients, in_start_date, in_end_date))sns_logger.info(f"程序执行了 {execution_time:.6f} 秒")

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

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

相关文章

Python爬虫入门与登录验证自动化思路

1、pytyon爬虫 1.1、爬虫简介 Python爬虫是使用Python编写的程序&#xff0c;可以自动访问网页并提取其中的信息。爬虫可以模拟浏览器的行为&#xff0c;自动点击链接、填写表单、进行登录等操作&#xff0c;从而获取网页中的数据。 使用Python编写爬虫的好处是&#xff0c;…

【数据结构】十二、八种常用的排序算法讲解及代码分享

目录 一、插入排序 1)算法思想 2&#xff09;代码 二、希尔排序 1&#xff09;算法思想 2&#xff09;代码 三、选择排序 1&#xff09;算法思想 2&#xff09;代码 四、堆排序 1&#xff09;什么是最大堆 2&#xff09;如何创建最大堆 3&#xff09;算法思想 4&a…

C# Excel操作类EPPlus

摘要 EPPlus 是一个流行的用于操作 Excel 文件的开源库&#xff0c;适用于 C# 和 .NET 环境。它提供了丰富的功能&#xff0c;能够轻松地读取、写入和格式化 Excel 文件&#xff0c;使得在 C# 中进行 Excel 文件处理变得更加简单和高效。EPPlus 不需要安装 Microsoft Office 或…

ai写作文

天津市高考作文题 阅读下面的材料&#xff0c;根据要求写作。 在缤纷的世界中&#xff0c;无论是个人、群体还是国家&#xff0c;都会面对别人对我们的定义。我们要认真对待“被定义”&#xff0c;明辨是非&#xff0c;去芜存真&#xff0c;为自己的提升助力&#xff1b;也要勇…

知乎网站只让知乎用户看文章,普通人看不了

知乎默认不显示全部文章&#xff0c;需要点击展开阅读全文 然而点击后却要登录&#xff0c;这意味着普通人看不了博主写的文章&#xff0c;只有成为知乎用户才有权力查看文章。我想这不是知乎创作者希望的情况&#xff0c;他们写文章肯定是希望所有人都能看到。 这个网站篡改…

应用商店如何检测在架应用内容是否违规?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

线性代数|机器学习-P11方程Ax=b求解研究

文章目录 1. 变量数和约束条件数大小分类2. 最小二乘法和Gram-schmidt变换2.1 Gram-schmidt变换2.2 最小二乘法2.2.1 损失函数-Lasso 和regression2.2.2 损失函数-Lasso2.2.3 损失函数-regression2.2.4 Regression岭回归-矩阵验证2.2.5 Regression岭回归-导数验证 3. 迭代和随机…

人工智能的研究途径与方法

开篇 本文是学习《人工智能导论》这本书的笔记&#xff08;后续会持续更新&#xff09;。 正篇 心理模拟&#xff0c;符号推演 “心理模拟&#xff0c;符号推演”就是从人脑的宏观心理层面入手&#xff0c;以智能行为的心理模型为依据&#xff0c;将问题或知识表示成某种逻辑网…

【数据结构】队列——循环队列(详解)

目录 0 循环队列 1 特定条件下循环队列队/空队满判断条件 1.1 队列为空的条件 1.2 队列为满的条件 2 循环队列的实现 3 示例 4 注意事项 0 循环队列 循环队列&#xff08;Circular Queue&#xff09;是队列的一种实现方式&#xff0c;它通过将队列存储空间的最后一…

两个jsonl文件a和b,如何读取a文件中desc对应的值和type对应的值,然后在b文件中找到desc对应值相同的数据并把type的值写入?

两个jsonl文件a和b&#xff0c;如何读取a文件中desc对应的值和type对应的值&#xff0c;然后在b文件中找到desc对应值相同的数据并把type的值写入&#xff1f; import json# 读取a.jsonl文件中的数据 def read_jsonl(file_path):with open(file_path, r, encodingutf-8) as f:…

MySQL之多表查询—行子查询

一、引言 上篇博客学习了列子查询。 接下来学习子查询中的第三种——行子查询。 行子查询 1、概念 子查询返回的结果是一行&#xff08;当然可以是多列)&#xff0c;这种子查询称为行子查询。 2、常用的操作符 、 <> (不等于) 、IN 、NOT IN 接下来通过一个需求去演示和…

locale本地化库学习

std::locale 类型的对象&#xff08;本地环境对象&#xff09;是不可变刻面的一个不可变索引集。C 输入/输出库的每个流对象都与一个 std::locale 对象关联&#xff0c;并用它的各刻面来分析及格式化所有数据。另外&#xff0c;每个 std::basic_regex 对象也都与一个本地环境对…

Linux下软件安装

提示&#xff1a;制作不易&#xff0c;可以点个关注和收藏哦。 前言 介绍 Ubuntu 下软件安装的几种方式&#xff0c;及 apt&#xff0c;dpkg 工具的使用。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考. 一、先体验一下 比如我们想安装一个软件&…

Diffusers代码学习: 多个Adapter

T2I Adapter也是可组合的&#xff0c;允许您使用多个适配器对图像施加多个控制条件。例如&#xff0c;可以使用姿势贴图提供结构控制&#xff0c;使用深度贴图进行深度控制。这是由[MultiAdapter]类启用的。 让我们用姿势和深度适配器来调节文本到图像的模型。创建深度和姿势图…

简单的项目部署脚本(转载)

简单的项目部署脚本 1. 环境准备1.1 java1.2 maven1.3 git 2 以项目springboot-demo为例,创建项目路径3. 基于docker启动的部署脚本4. 部署日志记录4.1 将部署开始和结束的日志追加到部署日志中4.2 部署结果通知 原文链接 https://mp.weixin.qq.com/s/jjW2aIi_KUusQdc9uLnUGg …

IT闲谈-Kylin入门教程

目录 一、引言二、Kylin简介三、环境准备四、安装与配置五、数据导入与建模六、查询与分析七、总结 一、引言 Apache Kylin是一个开源的分布式分析引擎&#xff0c;旨在提供Hadoop/Spark之上的SQL接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据。Kylin通过…

【设计模式】结构型设计模式之 享元模式

文章目录 介绍关键概念 应用举例象棋游戏共享棋子对象文本编辑器中文字格式设计成享元模式 享元模式在 Java 中的应用享元模式在包装类缓存中的应用享元模式在 String 中的应用 对比享元模式和单例模式的区别享元模式与缓存的区别 总结优点缺点 介绍 享元模式&#xff0c;”享…

简单用java集合模拟斗地主发牌操作

简易斗地主发牌&#xff08;熟悉java集合的使用&#xff09; 1、需求 按照斗地主规则&#xff0c;完成洗牌发牌的动作。 具体要求如下&#xff1a; 1、准备牌&#xff1a;组装54张扑克牌 2、洗牌&#xff1a;54张牌顺序打乱 3、发牌&#xff1a;三个玩家参与游戏&#xf…

TinyVision V851s 使用 OpenCV + NPU 实现 Mobilenet v2 目标分类识别

用39块钱的V851se视觉开发板做了个小相机。 可以进行物品识别、自动追焦&#xff01; 这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频&#xff0c;并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能......并…

以无厚,入有间,做一件事为什么靠努力不行,不能长期维持

庖丁解牛&#xff0c;并不是在说人和技巧&#xff0c;而是在说解牛不在于刀的锋利&#xff0c;而是怎样才能做到让刀不产生损耗&#xff0c;就是熟悉牛肉纹路&#xff0c;按照纹路和肉骨间隙进行操刀。这就是尊重自然规律&#xff0c;对于人也是一样的&#xff0c;如果所有事情…