当前位置: 首页 > news >正文

第四天 文件操作(文本/CSV/JSON) - 异常处理机制 - 练习:日志文件分析器

Python文件操作与异常处理完全指南:从入门到实战

一、为什么要学习文件操作和异常处理?

在Python编程的初级阶段,我们主要处理内存中的数据。但当我们需要:

  • 永久保存数据
  • 处理各种格式的数据文件
  • 分析系统日志
  • 构建数据处理管道

文件操作和异常处理就成为了必备的核心技能。本教程将带你系统学习这些知识点,并通过一个真实的日志分析案例巩固所学内容。

二、基础文件操作全解析

2.1 文本文件读写基础

# 写入文本文件
with open('diary.txt', 'w', encoding='utf-8') as f:f.write("2023-07-20 晴\n")f.write("今天学会了Python文件操作!\n")# 读取文本文件
with open('diary.txt', 'r', encoding='utf-8') as f:content = f.read()print("文件内容:\n" + content)

关键点解析

  • with语句自动管理文件关闭
  • 指定编码格式避免乱码
  • 不同模式的区别:
    • ‘r’:只读(默认)
    • ‘w’:写入(覆盖)
    • ‘a’:追加
    • ‘x’:排他创建

2.2 CSV文件处理技巧

import csv# 写入CSV文件
data = [['姓名', '年龄', '城市'],['张三', 25, '北京'],['李四', 30, '上海']
]with open('people.csv', 'w', newline='', encoding='utf-8') as f:writer = csv.writer(f)writer.writerows(data)# 读取CSV文件
with open('people.csv', 'r', encoding='utf-8') as f:reader = csv.DictReader(f)for row in reader:print(f"{row['姓名']} 来自 {row['城市']}")

进阶技巧

  • 处理带标题的CSV文件
  • 处理不同分隔符的文件
  • 处理包含特殊字符的字段

2.3 JSON数据操作指南

import json# 写入JSON文件
user_data = {"name": "王五","age": 28,"hobbies": ["编程", "阅读", "游泳"]
}with open('user.json', 'w', encoding='utf-8') as f:json.dump(user_data, f, ensure_ascii=False, indent=2)# 读取JSON文件
with open('user.json', 'r', encoding='utf-8') as f:data = json.load(f)print(f"{data['name']} 的年龄是 {data['age']}")

注意事项

  • 中文编码处理
  • 日期等特殊类型的转换
  • 大文件的分块处理

三、异常处理深度解析

3.1 异常处理基础结构

try:with open('missing.txt', 'r') as f:content = f.read()
except FileNotFoundError:print("文件不存在!")
except PermissionError:print("没有访问权限!")
except Exception as e:print(f"未知错误:{str(e)}")
else:print("文件读取成功!")
finally:print("清理完成")

3.2 常见文件操作异常

异常类型触发场景解决方案
FileNotFoundError文件不存在检查文件路径
PermissionError没有访问权限修改文件权限
IsADirectoryError尝试打开目录检查路径类型
UnicodeDecodeError编码格式不匹配指定正确编码

3.3 自定义异常实践

class InvalidLogFormat(Exception):"""自定义日志格式异常"""def __init__(self, line_num):super().__init__(f"第 {line_num} 行格式错误")def parse_log(line, line_num):if len(line.split('|')) != 3:raise InvalidLogFormat(line_num)# 其他解析逻辑...try:parse_log("错误日志内容", 5)
except InvalidLogFormat as e:print(e)

四、综合实战:日志文件分析器

4.1 项目需求分析

开发一个能够:

  1. 解析多种日志格式
  2. 统计错误类型数量
  3. 生成分析报告
  4. 处理各种异常情况

的日志分析系统

4.2 完整实现代码

import re
import json
from datetime import datetime
from collections import defaultdictclass LogAnalyzer:LOG_PATTERN = r'(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(?P<level>\w+)\] (?P<message>.+)'def __init__(self, log_path):self.log_path = log_pathself.stats = defaultdict(int)self.errors = []def analyze(self):try:with open(self.log_path, 'r', encoding='utf-8') as f:for line_num, line in enumerate(f, 1):try:self._process_line(line.strip(), line_num)except Exception as e:print(f"第 {line_num} 行处理失败:{str(e)}")except FileNotFoundError:print("日志文件不存在")except Exception as e:print(f"分析失败:{str(e)}")def _process_line(self, line, line_num):match = re.match(self.LOG_PATTERN, line)if not match:raise ValueError("无效的日志格式")data = match.groupdict()self.stats[data['level']] += 1if data['level'] in ['ERROR', 'FATAL']:self.errors.append({'timestamp': data['timestamp'],'message': data['message'],'line': line_num})def generate_report(self):report = {'summary': dict(self.stats),'error_count': len(self.errors),'errors': self.errors,'analysis_time': datetime.now().isoformat()}try:with open('log_report.json', 'w', encoding='utf-8') as f:json.dump(report, f, ensure_ascii=False, indent=2)print("报告生成成功!")except Exception as e:print(f"报告生成失败:{str(e)}")# 使用示例
analyzer = LogAnalyzer('system.log')
analyzer.analyze()
analyzer.generate_report()

4.3 功能扩展建议

  1. 增加日志文件监控功能
  2. 实现邮件报警功能
  3. 支持多种日志格式配置
  4. 添加可视化图表展示

五、常见问题解答

Q1:文件操作时为什么推荐使用with语句?

  • 自动管理文件关闭
  • 异常安全保证
  • 代码更简洁

Q2:如何处理大文件?

# 分块读取示例
def process_large_file(path):with open(path, 'r', encoding='utf-8') as f:while True:chunk = f.read(4096)  # 每次读取4KBif not chunk:break# 处理数据块...

Q3:如何选择CSV和JSON格式?

格式适用场景优点
CSV表格型数据交换简单、体积小
JSON复杂结构化数据存储支持嵌套结构

六、学习资源推荐

  1. Python官方文档
  2. 《Python Cookbook》文件IO章节
  3. 开源项目中的文件处理案例
  4. 正则表达式可视化工具:regexper.com

练习建议

  1. 实现一个配置文件读取器
  2. 开发简单的数据转换工具(CSV转JSON)
  3. 为现有代码添加完善的异常处理

通过本教程的学习,你已经掌握了Python文件操作和异常处理的核心技能。记住:

  • 始终考虑异常处理
  • 选择合适的文件格式
  • 编写可维护的IO代码

相关文章:

第四天 文件操作(文本/CSV/JSON) - 异常处理机制 - 练习:日志文件分析器

Python文件操作与异常处理完全指南&#xff1a;从入门到实战 一、为什么要学习文件操作和异常处理&#xff1f; 在Python编程的初级阶段&#xff0c;我们主要处理内存中的数据。但当我们需要&#xff1a; 永久保存数据处理各种格式的数据文件分析系统日志构建数据处理管道 …...

多onnx模型导出合并调研(文本检测+方向分类+文本识别)

👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… ​💫签名:面朝大海,春暖花开! 多onnx模型合并导出调研(文本检测+方向分类+文本识别) 引言1,尝试合并两个模型(文本方向分类+文本识别模型)(并行合并)(1)文本方向分类(2)文本识别模型(…...

linux scp复制多层级文件夹到另一服务器免密及脚本配置

文章目录 生成 SSH 密钥对将公钥复制到目标服务器验证免密登录scp 多级文件夹复制脚本 生成 SSH 密钥对 在本地机器上&#xff0c;使用 ssh-keygen 命令生成 SSH 密钥对。打开终端并执行以下命令&#xff1a; ssh-keygen -t rsa 按提示连续按回车键&#xff0c;默认会在 ~/.ss…...

Ubuntu 22.04 安装向日葵远程控制

1. 前言 由于公司客户的服务器用是图形化桌面&#xff0c;所以我们需要一个远程控制工具来控制服务器&#xff0c;目前市面上两款比较热门的控制软件就是ToDesk和向日葵了&#xff0c;我们今天就来学习一下向日葵的使用 2. 下载软件 前往向日葵官网下载 向日葵远程控制app官…...

Spring Boot(十七):集成和使用Redis

Redis(Remote Dictionary Server,远程字典服务器)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Spring Boot 中集成和使用Redis主要涉及以下几个步骤: 添加依赖 在项目的pom.xml文件中添加Redis的依赖。Spring Boot提供了对Redis的集…...

Redisson - 分布式锁和同步器

文章目录 锁&#xff08;Lock&#xff09;公平锁&#xff08;Fair Lock&#xff09;联锁&#xff08;MultiLock&#xff09;红锁&#xff08;RedLock&#xff09; 【已废弃】读写锁&#xff08;ReadWriteLock&#xff09;信号量&#xff08;Semaphore&#xff09;可过期许可信号…...

LabVIEW时间触发协议

介绍了基于LabVIEW开发的时间触发协议应用&#xff0c;通过实例解析了FlexRay总线的设计与优化。通过技术细节、系统构建和功能实现等方面&#xff0c;探讨了LabVIEW在现代工业通信系统中的应用效能&#xff0c;特别是在提高通信可靠性和实时性方面的贡献。 ​ 项目背景 在工…...

IDEA的使用

idea的介绍 IntelliJ IDEA 是由 JetBrains 公司开发的一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java语言的开发&#xff0c;但同时也支持其他多种编程语言如Kotlin、Groovy、Scala等。它被广泛认为是专业软件开发者的首选工具之一&#xff…...

unity一个图片的物体,会有透明的效果

如图 想要去掉这个透明效果 选择一个高层级的layer即可。...

IP报文格式

IPv4 头部结构&#xff08;共 20 字节&#xff0c;不含可选字段&#xff09; 1. 版本&#xff08;Version&#xff09; 长度&#xff1a;4 比特 作用&#xff1a;标识 IP 协议版本&#xff08;IPv4 值为 4&#xff0c;IPv6 值为 6&#xff09;。 示例&#xff1a;0100&#x…...

2025最新-智慧小区物业管理系统

目录 1. 项目概述 2. 技术栈 3. 功能模块 3.1 管理员端 3.1.1 核心业务处理模块 3.1.2 基础信息模块 3.1.3 数据统计分析模块 3.2 业主端 5. 系统架构 5.1 前端架构 5.2 后端架构 5.3 数据交互流程 6. 部署说明 6.1 环境要求 6.2 部署步骤 7. 使用说明 7.1 管…...

sql结尾加刷题

找了一下mysql对extractvalue()、updatexml()函数的官方介绍https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html#function_extractvalue ExtractValue(xml_frag, xpath_expr) 知识点 解释一下这两个参数xml_frag&#xff0c;是xml标记片段&#xff0c;第二个参数…...

UE4学习笔记 FPS游戏制作26 UE中的UI

文章目录 几个概念创建一个UI蓝图添加UI获取UI的引用 切换设计器和UI蓝图将UI添加到游戏场景锚点轴点slotSizeToContent三种UI数据更新方式函数绑定属性绑定事件绑定 九宫格分割图片 几个概念 UMG&#xff1a;UE的UI编辑器 slate UI: UE的UI的编辑语言 创建一个UI蓝图 右键用…...

pnpm 依赖升级终极指南:从语义化版本控制到 Monorepo 全局更新的企业级实践

要使用 pnpm 更新所有依赖包&#xff0c;可以通过以下命令实现&#xff1a; 1. 更新所有依赖到符合语义化版本的范围 pnpm update该命令会根据 package.json 中定义的版本范围&#xff08;如 ^1.0.0 或 ~2.3.4&#xff09;更新依赖包到最新兼容版本&#xff0c;但不会突破版本…...

C++:类和对象(二)

目录 const成员函数 1. 基本语法 2. const 成员函数的作用 (1) 保证对象不被修改 (2) 提高代码安全性 (3) 支持 const 对象 3. 示例 (1) 基本用法 (2) const 对象只能调用 const 成员函数 (3) mutable 成员变量 4. const 成员函数的重载 初始化列表 基本语法 为什…...

【Django】教程-2-前端-目录结构介绍

【Django】教程-1-安装创建项目目录结构介绍 3. 前端文件配置 3.1 目录介绍 在app下创建static文件夹, 是根据setting中的配置来的 STATIC_URL ‘static/’ templates目录&#xff0c;编写HTML模板&#xff08;含有模板语法&#xff0c;继承&#xff0c;{% static ‘xx’ …...

2025年渗透测试面试题总结-某快手-安全工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 快手-安全工程师 一、Linux提权技术&#xff1a;Dirty Cow漏洞深度解析 1.1 漏洞技术原理 1.2 漏洞影…...

数据结构之栈

目录 1 简介 2 栈的基本概念 3 代码实现 4 代码解析&#xff08;部分&#xff09; 4.1 初始化栈 4.2 入栈 4.3 出栈 4.4 只读获取栈顶元素&#xff08;peek&#xff09; 4.5 判断是否为空 4.6 获取栈大小 4.7 十进制转换为二进制 5 核心操作分析 6 总结 1 简介 栈…...

【AndroidRTC-10】webrtc是如何确定双端的编解码类型?

Android-RTC系列软重启&#xff0c;改变以往细读源代码的方式 改为 带上实际问题分析代码。增加实用性&#xff0c;方便形成肌肉记忆。同时不分种类、不分难易程度&#xff0c;在线征集问题切入点。 问题&#xff1a;webrtc-android是如何确定编解码类型&#xff0c;如何调整视…...

深度求索(DeepSeek):以AI之力重塑医疗未来

目录 一、智能诊断&#xff1a;打破医疗认知的“分辨率极限” 二、药物研发&#xff1a;重构分子世界的“造物逻辑” 三、医疗资源重构&#xff1a;打造分级诊疗的“神经中枢” 四、健康管理&#xff1a;编织个体化医学的“防护网” 五、伦理与进化&#xff1a;构建医疗AI…...

【HTML 基础教程】HTML 属性

HTML 属性 属性是 HTML 元素提供的附加信息。 属性通常出现在 HTML 标签的开始标签中&#xff0c;用于定义元素的行为、样式、内容或其他特性。 属性总是以 name"value" 的形式写在标签内&#xff0c;name 是属性的名称&#xff0c;value 是属性的值。 HTML 属性 …...

macOS 制作dmg磁盘映像安装包

制作dmg磁盘影像安装包需要准备一下材料&#xff1a; 1. 导出的APP 2. 背景图片 3. 应用程序替身 前两种材料很容易得到。 下面介绍一下 应用程序替身制作过程&#xff1a; Finder —> 选中 应用程序 --> 找到顶部菜单栏中 的 前往 ----> 选择上层文件夹选中应用程…...

Appium中元素定位之一组元素定位API

应用场景 和定位一个元素相同&#xff0c;但如果想要批量的获取某个相同特征的元素&#xff0c;使用定位一组元素的方式更加方便 在 Appium 中定位一组元素的 API 与定位单个元素的 API 类似&#xff0c;但它们返回的是一个元素列表&#xff08;List<MobileElement>&am…...

webstorm中element-ui标签无法跳转源码

原本用的webstorm2019,之前的项目开发时切实体验过跳转element-ui源码&#xff0c;觉得很香。 更新了webstorm至2024&#xff0c;居然不行了&#xff0c;能弹出来提示&#xff0c;但就是找不到定义。 不知道是不是2024版本的问题&#xff0c;node_moudles不管我是否手动添加exc…...

【蓝桥杯】算法笔记1

1.暴力枚举 给定一个正整数n,请找出所有满足a + b = n的整数对(a, b),其中a和b都是正整数,且a ≤ b。 输入格式:一个正整数n (1 ≤ n ≤ 10⁶) 输出格式:所有符合条件的(a, b)对,每行一对,按a的升序排列。如果没有符合条件的对,输出"No solution"。 问题分…...

Pytorch学习笔记(十一)Learning PyTorch - What is torch.nn really

这篇博客瞄准的是 pytorch 官方教程中 Learning PyTorch 章节的 What is torch.nn really? 部分。主要是教你如何一步一步将最原始的代码进行重构至pytorch标准的代码&#xff0c;如果你已经熟悉了如何使用原始代码以及pytorch标准形式构建模型&#xff0c;可以跳过这一篇。 …...

OpenGL ES 2.0与OpenGL ES 3.1的区别

如果硬件支持且需要更高质量的图形效果&#xff0c;推荐3.1&#xff1b;如果兼容性和开发简便更重要&#xff0c;且效果需求不高&#xff0c;2.0更合适。不过现代车载系统可能越来越多支持3.x版本&#xff0c;所以可能倾向于使用3.1&#xff0c;但具体情况还需调查目标平台的硬…...

【Unity3D脚本与系统设计6】鼠标触摸超时待机实现

实现步骤 在Unity中实现一个功能&#xff0c;当鼠标或触摸超过一定时间没有操作时&#xff0c;自动返回待机界面。 检测输入 首先&#xff0c;我需要检测用户的输入&#xff0c;无论是鼠标还是触摸。Unity的Input系统可以检测到鼠标和触摸事件&#xff0c;比如Input.GetAxis…...

SpringMVC 入门教程

一、SpringMVC 简介 SpringMVC 是基于 MVC 设计模式的轻量级 Web 框架&#xff0c;核心功能包括&#xff1a; 请求分发&#xff1a;通过 DispatcherServlet 统一处理请求。注解驱动&#xff1a;使用 Controller、RequestMapping 简化开发。视图解析&#xff1a;支持 JSP、Thy…...

矿山自动化监测解决方案

1.行业现状 为贯彻落实《中共中央国务院关于推进安全生产领域改革发展的意见》《“十四五”矿山安全生产规划》&#xff08;应急〔2022〕64号&#xff09;、《国务院安委会办公室关于加强矿山安全生产工作的紧急通知》&#xff08;安委办〔2021〕3号&#xff09;等有关工作部署…...

el-table + el-pagination 前端实现分页操作

el-table el-pagination 前端实现分页操作 后端返回全部列表数据&#xff0c;前端进行分页操作 html代码 <div><el-table :data"tableData" border><el-table-column label"序号" type"index" width"50" /><el…...

NIO ByteBuffer 总结

目录 基本概念创建 ByteBuffer核心属性关键方法切换模式读写操作压缩数据 基本概念 java.nio.ByteBuffer 是 Java NIO 中一个核心类&#xff0c; 用于高效处理二进制数据的读写操作。应用于通道&#xff08;Channel&#xff09;的I/O操作。作用&#xff1a; 数据缓冲&#xf…...

华为hcia——Datacom实验指南——配置IPv4静态路由,默认路由和浮动静态路由

什么是IPv4 IPv4静态路由&#xff0c;是手动配置的&#xff0c;不会随着网络拓扑的变化而变化&#xff0c;所配置的路由信息也不会在网络中传播&#xff0c;所以它主要运用在小型网络或者作为动态路由的补充。 IPv4的配置 配置的命令很简单 IP route-static &#xff08;目…...

Git入门——常用指令汇总

以下是一份精心整理的 Git常用指令速查表&#xff0c;基本覆盖日常开发使用场景&#xff0c;建议收藏备用&#x1f447; &#x1f527; 环境配置 指令作用git config --global user.name "你的名字"设置全局用户名git config --global user.email "你的邮箱&qu…...

深入解析 MyBatis-Plus 批量操作:原理、实现与性能优化

引言 在高并发、大数据量场景下,批量数据库操作是提升系统性能的核心手段之一。本文以 MyBatis-Plus 为例,深入剖析 批量更新 和 自定义批量插入 的实现原理,并结合实战代码与性能测试,揭示其在高性能场景下的应用价值。 批量更新:动态 SQL 的极致运用 原理与 SQL 生成…...

2025年成都市双流区农业科技试验示范基地建设方案申报条件材料和补贴程序、时间安排

成都市双流区2025年农业科技试验示范基地建设方案申报条件材料和补贴程序、时间安排如下&#xff0c;需要申报的可指导&#xff01; 一、成都市双流区农业科技试验示范基地申报 &#xff08;一&#xff09;基地建设数量。2025年建设农业科技试验示范基地2个。 &#xff08;二…...

8路CXP相机采集系统介绍

8xCXP相机采集系统介绍 目录 1 系统概述 4 2 硬件架构 5 2.1 FPGA处理单元 5 2.2 CXP接口层 6 2.3 CXP相机说明与使用要求 7 2.4 SSI控制器板 8 3 FPGA方案 9 3.1 FPGA实现 9 3.2 Block Design说明 10 4 软件方案 14 4.1 嵌入式层 14 4.2 上位机软件&#xff08;C…...

vue2前端日志数据存储,推荐(IndexedDB)

前言&#xff1a;首先&#xff0c;我得回忆一下IndexedDB的基本概念和用法&#xff0c;确保自己理解正确。IndexedDB是一个浏览器内置的数据库&#xff0c;允许存储大量结构化数据&#xff0c;支持事务和索引查询&#xff0c;适合需要离线存储的应用场景。 接下来&#xff0c;用…...

onedav一为导航批量自动化导入网址(完整教程)

OneNav作为一个功能强大的导航工具,支持后台管理、加密链接、浏览器书签批量导入等功能,能够帮助用户轻松打造专属的导航页面。今天,我将为大家详细介绍如何实现OneNav导航站的批量自动化导入网址。 1、建立要批量导入的表格 格局需要创建表格,表格的要求是一定要有需要,…...

Ubuntu Linux安装PyQt5并配置Qt Designer

一 安装 PyQt5 借助 apt 包管理器来安装 PyQt5 及其相关的开发工具&#xff1a; sudo apt install python3-pyqt5 pyqt5-dev-tools 假如报错&#xff0c; You might want to run apt --fix-broken install to correct these. 直接执行&#xff1a; sudo apt --fix-…...

无人机螺旋桨平衡标准

螺旋桨平衡是确保无人机(UAV)平稳运行、可靠性和使用寿命的关键过程。螺旋桨的不平衡会导致振动、噪音&#xff0c;并加速关键部件的磨损&#xff0c;从而对飞行性能产生负面影响。 ISO 21940-11:2016标准为旋翼平衡提供了一个广泛引用的框架&#xff0c;定义了可接受的不平衡…...

基于MCP协议的多模态模型优化在医疗3D打印精密人工关节制造中的研究

一、引言 1.1 研究背景与意义 在全球人口老龄化趋势愈发明显的当下,诸如骨关节炎、类风湿性关节炎这类关节疾病的发病率不断攀升,进而使得人工关节置换手术的需求呈现出激增态势。人工关节置换手术作为治疗终末期关节疾病的有效手段,能够显著缓解患者疼痛,提升关节功能与生…...

ESLint报错:Could not find config file.

如果你的ESLint的版本大于 8&#xff0c;同时使用 .eslinrc.js 和 .eslintignore 作为配置文件&#xff0c;且目前用的是 VSCODE &#xff0c;就有可能遇到报错&#xff1a; Could not find config file. 这个是因为 VSCode 中 ESLint 插件的配置 eslint.useFlatConfig 的问题…...

npm install 卡在创建项目:sill idealTree buildDeps

参考&#xff1a; https://blog.csdn.net/PengXing_Huang/article/details/136460133 或者再执行 npm install -g cnpm --registryhttps://registry.npm.taobao.org 或者换梯子...

drizzleDumper:基于内存搜索的Android脱壳工具

一、工具介绍 drizzleDumper 是一款基于内存搜索的 Android 脱壳工具&#xff0c;主要用于从加固的 Android 应用程序中提取原始的 DEX 文件。它通过分析应用程序运行时的内存&#xff0c;定位并提取被加固的 DEX 文件&#xff0c;从而帮助开发者、安全研究人员进行逆向工程和…...

信号处理中的窗

窗函数&#xff08;Window Function&#xff09;是一种在信号处理中常用的工具&#xff0c;用于对信号进行截断和加权处理。它在频谱分析、滤波器设计以及信号处理的许多其他领域中都发挥着重要作用。 窗函数的基本概念 窗函数本质上是一个有限长度的序列&#xff0c;通常用于…...

FFmpeg学习:AVPacket结构体

1.AVPacket结构体 FFmpeg中用于封装一帧的编码数据的结构体&#xff08;比如H264视频帧或者AAC音频帧&#xff09;&#xff0c;主要用于编解码过程中数据的载体&#xff0c;使用av_read_frame()读取获得&#xff0c;或者使用avcodec_send_packet()进行解码&#xff0c;与AVFra…...

34.[前端开发-JavaScript基础]Day11-王者轮播图-书籍购物车-BOM对象-JSON

1 认识BOM操作 认识BOM 2 全局对象window window对象 window对象的作用 window常见的属性 window常见的方法 3 事件对象event window常见的事件 4 location、history location对象常见的属性 Location对象常见的方法 URLSearchParams history对象常见属性和方法 5 navigato…...

FLEXlm如何通过web调用

FLEXlm 是一种流行的软件许可管理工具&#xff0c;广泛用于各种软件产品的授权管理。它支持多种协议&#xff0c;包括传统的服务器-客户端模式和一些基于网络的解决方案。如果你想通过 Web 接口调用 FLEXlm 许可证服务器&#xff0c;你可以通过以下几种方式实现&#xff1a; 使…...

深度解析Spring Boot可执行JAR的构建与启动机制

一、Spring Boot应用打包架构演进 1.1 传统JAR包与Fat JAR对比 传统Java应用的JAR包在依赖管理上存在明显短板&#xff0c;依赖项需要单独配置classpath。Spring Boot创新的Fat JAR&#xff08;又称Uber JAR&#xff09;解决方案通过spring-boot-maven-plugin插件实现了"…...