【第九节】python中xml解析和json编解码

news2024/11/16 21:49:35

目录

一、Python XML 解析

1.1 什么是XML

1.2 Python 对 XML 的解析方法

1.3 SAX解析xml

1.4 xml.dom解析xml

1.6 ElementTree解析XML

二、Python编解码json

2.1 什么是json

2.2 使用json 库

2.3 使用第三方库Demjson


一、Python XML 解析

1.1 什么是XML

        XML,全称为可扩展标记语言(eXtensible Markup Language),是一种用于描述数据的标记语言。XML的设计宗旨是传输和存储数据,强调数据的内容和结构,而非数据的显示方式。

以下是XML的一些关键特点:

1). **自描述性**:XML使用标签来定义数据的结构和意义,这些标签可以由用户根据需要自行定义,因此具有很高的灵活性和扩展性。

2). **平台无关性**:XML的文本格式使其独立于具体的硬件和软件平台,可以在不同的系统之间轻松交换数据。

3). **结构化数据**:XML文档通常遵循一定的层次结构,这使得数据更加有序和易于管理。

4). **元标记语言**:XML是一种元标记语言,这意味着它可以用来创建其他特定领域的标记语言。例如,SVG(可缩放矢量图形)和MathML(数学标记语言)都是基于XML的。

5). **可扩展性**:由于XML的标签是自定义的,因此可以根据需要添加新的标签,而不会影响现有的数据和应用程序。

6). **验证机制**:XML可以通过文档类型定义(DTD)或XML Schema来定义数据的结构和约束,从而确保数据的完整性和有效性。

        XML在许多领域都有广泛的应用,包括Web服务、配置文件、数据存储和交换等。它的灵活性和强大的数据描述能力使其成为一种重要的数据处理工具。

1.2 Python 对 XML 的解析方法

        在Python中,解析XML文件主要有三种方法:SAX(Simple API for XML)、DOM(Document Object Model)以及ElementTree。每种方法都有其独特的特点和适用场景。

1. **SAX(Simple API for XML)**:
   - SAX是一种基于事件驱动的解析方式。
   - 在解析XML时,SAX会逐行读取文件,并在识别出特定元素时触发相应的事件。
   - 这种方法不需要将整个XML文档加载到内存中,因此适用于处理大型XML文件。
   - 由于SAX是只读的,它不支持对XML文档的修改。

2. **DOM(Document Object Model)**:
   - DOM解析器会将整个XML文档加载到内存中,并构建一个树状结构的对象模型。
   - 这使得用户可以随机访问树中的任何节点,进行查询、修改、删除或添加操作。
   - 然而,DOM方法在处理大型XML文件时可能会消耗大量内存。

3. **ElementTree**:
   - ElementTree提供了一种轻量级、高效且易于使用的方式来解析和处理XML。
   - 它将XML数据表示为一个树状结构,类似于DOM,但更加简洁和高效。
   - ElementTree支持对XML文档的读取和写入操作,适用于中等大小的XML文件。

        选择哪种解析方法取决于具体需求,例如文件大小、内存限制、是否需要修改XML内容等因素。对于大型文件,SAX可能是更合适的选择;而对于需要频繁修改的中小型文件,ElementTree或DOM可能更为适宜。

1.3 SAX解析xml

        Python中使用SAX解析XML文档时,涉及到两个核心组件:解析器和事件处理器。

        SAX解析器负责逐行读取XML文档,并在识别出特定元素时向事件处理器发送相应的事件,例如元素的开始和结束。

        事件处理器则负责响应这些事件,对传递过来的XML数据进行处理。

SAX解析方式特别适用于以下场景:
1). 处理大型XML文件;
2). 仅需获取文件的部分内容或特定信息;
3). 需要构建自定义对象模型的情况。

        在Python中,使用SAX解析XML需要先导入`xml.sax`模块中的`parse`函数,以及`xml.sax.handler`模块中的`ContentHandler`类。

`ContentHandler`类包含多个方法,用于处理不同类型的XML事件:

- `characters(content)`方法:在遇到字符数据时被调用,`content`参数包含这些字符串。
- `startDocument()`方法:在文档开始时被调用。
- `endDocument()`方法:在文档结束时被调用。
- `startElement(name, attrs)`方法:在遇到XML开始标签时被调用,`name`是标签名,`attrs`是属性值的字典。
- `endElement(name)`方法:在遇到XML结束标签时被调用。

此外,`xml.sax`模块还提供了以下方法:

- `make_parser()`方法:创建并返回一个新的解析器对象。
- `parse(xmlfile, contenthandler[, errorhandler])`方法:创建一个SAX解析器并解析指定的XML文件。
- `parseString(xmlstring, contenthandler[, errorhandler])`方法:创建一个XML解析器并解析指定的XML字符串。

        这些方法和类构成了Python中使用SAX解析XML的基础框架,开发者可以根据具体需求重写`ContentHandler`类中的方法,以实现对XML数据的定制化处理。

我们实验使用到的 XML 实例文件 movies.xml 内容如下:

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

解析上面xml的python代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import xml.sax
 
class MovieHandler( xml.sax.ContentHandler ):
   def __init__(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""
 
   # 元素开始事件处理
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title
 
   # 元素结束事件处理
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "Type:", self.type
      elif self.CurrentData == "format":
         print "Format:", self.format
      elif self.CurrentData == "year":
         print "Year:", self.year
      elif self.CurrentData == "rating":
         print "Rating:", self.rating
      elif self.CurrentData == "stars":
         print "Stars:", self.stars
      elif self.CurrentData == "description":
         print "Description:", self.description
      self.CurrentData = ""
 
   # 内容事件处理
   def characters(self, content):
      if self.CurrentData == "type":
         self.type = content
      elif self.CurrentData == "format":
         self.format = content
      elif self.CurrentData == "year":
         self.year = content
      elif self.CurrentData == "rating":
         self.rating = content
      elif self.CurrentData == "stars":
         self.stars = content
      elif self.CurrentData == "description":
         self.description = content
  
if ( __name__ == "__main__"):
   
   # 创建一个 XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)
 
   # 重写 ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")

代码执行结果如下:

*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Stars: 10
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Stars: 2
Description: Viewable boredom

1.4 xml.dom解析xml

        文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。

        一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。

python中用xml.dom.minidom来解析xml文件,实例如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
from xml.dom.minidom import parse
import xml.dom.minidom
 
# 使用minidom解析器打开 XML 文档
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")
 
# 在集合中获取所有电影
movies = collection.getElementsByTagName("movie")
 
# 打印每部电影的详细信息
for movie in movies:
   print "*****Movie*****"
   if movie.hasAttribute("title"):
      print "Title: %s" % movie.getAttribute("title")
 
   type = movie.getElementsByTagName('type')[0]
   print "Type: %s" % type.childNodes[0].data
   format = movie.getElementsByTagName('format')[0]
   print "Format: %s" % format.childNodes[0].data
   rating = movie.getElementsByTagName('rating')[0]
   print "Rating: %s" % rating.childNodes[0].data
   description = movie.getElementsByTagName('description')[0]
   print "Description: %s" % description.childNodes[0].data

执行结果如下:

Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom

1.6 ElementTree解析XML

import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('movies.xml')
root = tree.getroot()

# 遍历所有的movie元素
for movie in root.findall('movie'):
    # 获取movie的属性
    title = movie.get('title')
    # 获取子元素的文本内容
    movie_type = movie.find('type').text
    format = movie.find('format').text
    year = movie.find('year').text if movie.find('year') is not None else 'N/A'
    rating = movie.find('rating').text
    stars = movie.find('stars').text
    description = movie.find('description').text
    
    # 打印信息
    print(f"Title: {title}")
    print(f"Type: {movie_type}")
    print(f"Format: {format}")
    print(f"Year: {year}")
    print(f"Rating: {rating}")
    print(f"Stars: {stars}")
    print(f"Description: {description}")
    print("-" * 40)

二、Python编解码json

2.1 什么是json

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON 是基于 JavaScript 编程语言的一个子集,但它是独立于语言的文本格式,因此可以在多种编程语言中使用。

### JSON 的结构

JSON 数据格式主要由两种结构组成:

1). **键值对集合**:这通常表现为对象(object),在 JSON 中用花括号 `{}` 表示。每个键值对由一个键和一个值组成,键和值之间用冒号 `:` 分隔,每个键值对之间用逗号 `,` 分隔。例如:
   ```json
   {
     "name": "John",
     "age": 30,
     "city": "New York"
   }
   ```

2). **值的有序列表**:这通常表现为数组(array),在 JSON 中用方括号 `[]` 表示。数组中的每个值之间用逗号 `,` 分隔。例如:
   ```json
   [
     "apple",
     "banana",
     "cherry"
   ]
   ```

JSON 支持以下数据类型:
- 字符串(string)
- 数字(number)
- 对象(object)
- 数组(array)
- 布尔值(boolean)
- null

### JSON 的应用

        JSON 由于其简洁性和通用性,在现代软件开发中得到了广泛的应用,主要包括以下几个方面:

1). **数据交换**:JSON 常用于不同系统之间的数据交换,特别是在 Web 开发中,前端和后端之间通过 JSON 格式传递数据。

2). **配置文件**:JSON 格式简洁易读,常被用作配置文件的格式,如应用程序的设置文件。

3). **API 响应**:RESTful API 通常使用 JSON 格式返回数据,使得客户端能够轻松解析和处理。

4). **日志记录**:JSON 格式的日志易于解析和查询,因此在日志记录系统中也得到了广泛应用。

5). **存储数据**:虽然 JSON 不是数据库格式,但在某些情况下,它被用于存储结构化数据,尤其是在需要快速读写的场景中。

6). **移动应用**:移动应用开发中,JSON 常用于从服务器获取数据,并在应用中进行展示和处理。

7). **物联网(IoT)**:在物联网设备中,JSON 常用于设备与服务器之间的数据传输。

JSON 的广泛应用得益于其简单、灵活和易于处理的特性,使得它成为现代软件开发中不可或缺的一部分。

2.2 使用json 库

        在Python中,处理JSON对象非常简单,因为Python标准库提供了`json`模块,用于编码(序列化)和解码(反序列化)JSON数据。以下是如何使用`json`模块进行JSON编码和解码的示例:

### 编码(序列化)JSON对象

        要将Python对象编码为JSON字符串,可以使用`json.dumps()`方法。以下是一个示例:

import json

# 定义一个Python对象
data = {
    "name": "John Doe",
    "age": 30,
    "city": "New York",
    "is_student": False,
    "courses": ["Math", "Science", "History"]
}

# 将Python对象编码为JSON字符串
json_string = json.dumps(data, indent=4)
print(json_string)

        在这个示例中,我们定义了一个Python字典`data`,然后使用`json.dumps()`方法将其编码为JSON字符串。`indent=4`参数用于美化输出,使JSON字符串更易读。

  python 原始类型向 json 类型的转化对照表:

### 解码(反序列化)JSON对象

        要将JSON字符串解码为Python对象,可以使用`json.loads()`方法。以下是一个示例:

import json

# 定义一个JSON字符串
json_string = '''
{
    "name": "John Doe",
    "age": 30,
    "city": "New York",
    "is_student": false,
    "courses": ["Math", "Science", "History"]
}'''

# 将JSON字符串解码为Python对象
data = json.loads(json_string)
print(data)
print(type(data))  # 输出: <class 'dict'>

        在这个示例中,我们定义了一个JSON字符串`json_string`,然后使用`json.loads()`方法将其解码为Python字典。

json 类型转换到 python 的类型对照表:

### 处理文件中的JSON数据

        如果需要从文件中读取JSON数据或将JSON数据写入文件,可以使用`json.load()`和`json.dump()`方法。以下是一个示例:

import json

# 写入JSON数据到文件
data = {
    "name": "John Doe",
    "age": 30,
    "city": "New York",
    "is_student": False,
    "courses": ["Math", "Science", "History"]
}

with open('data.json', 'w') as file:
    json.dump(data, file, indent=4)

# 从文件中读取JSON数据
with open('data.json', 'r') as file:
    data = json.load(file)
    print(data)

        在这个示例中,我们首先使用`json.dump()`方法将Python对象`data`写入名为`data.json`的文件中。然后,使用`json.load()`方法从文件中读取JSON数据并将其解码为Python对象。

        通过这些方法,你可以轻松地在Python中处理JSON数据。

2.3 使用第三方库Demjson

        `demjson` 是一个第三方 Python 模块,提供了对 JSON 数据的编码和解码功能,并且包含了 JSONLint 的格式化及校验功能。以下是如何使用 `demjson` 模块进行 JSON 编码和解码的详细步骤和示例。

### 安装 `demjson`

        首先,你需要安装 `demjson` 模块。你可以从源码安装,也可以使用 `pip` 安装。以下是从源码安装的步骤:

$ tar -xvzf demjson-2.2.3.tar.gz
$ cd demjson-2.2.3
$ python setup.py install

或者使用 `pip` 安装:

$ pip install demjson

### 编码 JSON 数据

`demjson` 的 `encode` 函数用于将 Python 对象编码成 JSON 字符串。

#### 语法

demjson.encode(self, obj, nest_level=0)

#### 示例

以下是一个将 Python 列表编码为 JSON 字符串的示例:

#!/usr/bin/python
import demjson

data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]

json_string = demjson.encode(data)
print(json_string)

输出结果为:

[{"a":1,"b":2,"c":3,"d":4,"e":5}]

### 解码 JSON 数据

`demjson` 的 `decode` 函数用于将 JSON 字符串解码为 Python 对象。

#### 语法

demjson.decode(self, txt)

#### 示例

以下是一个将 JSON 字符串解码为 Python 字典的示例:

#!/usr/bin/python
import demjson

json_string = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

data = demjson.decode(json_string)
print(data)

输出结果为:

{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}

### 总结

        `demjson` 模块提供了简单易用的方法来处理 JSON 数据。通过 `encode` 和 `decode` 函数,你可以轻松地在 Python 对象和 JSON 字符串之间进行转换。如果你需要更高级的 JSON 处理功能,`demjson` 可能是一个不错的选择。

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

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

相关文章

Python新手错误集锦(PyCharm)

# 自学Python&#xff0c;用Pycharm作环境。我这个手新到这时我学习的第一个编程软件&#xff0c;且本人专业是化学&#xff0c;以前对电脑最高级的使用是玩扫雷游戏。所以这里集合的错误都是小透明错误&#xff0c;大部分人请绕道。不断更新中...... 缩进错误 记住“indent”…

Jmeter之BeanShell使用(全网最详细的介绍)-第九天

一.什么是BeanShell Java写成的⼩型、免费的Java源代码解释器可以执⾏标准Java语句和表达式,完全符合java语法的java脚本语⾔&#xff08;需要会javase语⾔&#xff09;包括⼀些脚本命令&#xff0c;有⾃⼰的⼀些语法和⽅法&#xff0c;是⼀种松散类型的脚本语⾔&#xff08;这…

静电消除器的产品功能介绍

省维护&#xff1a;超高等级 冲击波可引起空间隔断&#xff0c;从而将外部空气的进入降至最低。与以往的针尖保护构造相比&#xff0c;通过形成绝对的空气屏障&#xff0c;实现了低流量且惊人的省维护性能。 大范围消除静电 配备了 Hi-Power I.C.C. 系统&#xff0c;除了可根据…

普通话水平测试证书真的有用吗?

对于部分考生而言报名普通话水平测试只是随大流&#xff0c;看周围同学都考了&#xff0c;自己也来报名。还有一些呢是看到博主总结哪些证好考有用&#xff0c;先拿下再说但是并不知道具体有什么用。那么&#xff0c;普通话水平测试证书&#xff0c;究竟能为我们带来什么呢&…

MyBatis Generator 代码生成器数据库表新增字段,不覆盖原文件

1.数据库窜库&#xff0c;配置了覆盖插件他会找其他库中同名的表 修改数据库链接 添加 &amp;nullCatalogMeansCurrenttrue <!-- 配置数据源&#xff0c;需要根据自己的项目修改 --><jdbcConnection driverClass"com.mysql.cj.jdbc.Driver"connect…

钡铼技术防水分线盒M12双通道4路DIN智能建筑自动化

钡铼技术的DB系列4路M12双通道预铸线缆分线盒是专为智能建筑自动化和工业自动化设备设计的先进解决方案。其工业级设计和耐酸碱腐蚀材料壳体&#xff0c;使其能够在恶劣环境下稳定运行&#xff0c;并且具备IP67和IP69K防护等级&#xff0c;保证了在高压高温水流清洗条件下的可靠…

python学习自制彩色,自定义格式日志打印制作LLoghelper

python学习自制彩色&#xff0c;自定义格式日志打印LLoghelper python print(xxx) 打印出来只显示白色黑底&#xff0c;没有时间&#xff0c;路径&#xff0c;不同的控制台颜色&#xff0c;对一个没有错误崩溃的python项目来说这样调试起一些逻辑非常不方便 目标&#xff1a; …

下载mmcv或者mmcv-full第三方库失败(已解决)

一、问题描述 首先跑yolov8改进的时候要下载mmcv-full&#xff0c;直接在环境里pip install一直失败&#xff0c;或者下载了之后运行代码说不存在程序啥的&#xff0c;也是没下对的意思。 mmcv或者说mmcv-full第三方库下载的版本是有要求的&#xff0c;要和自己的pytorch版本对…

解决maven java.rmi.ConnectException: Connection refused to host: 127.0.0.1 错误

highlight: gruvbox-dark theme: cyanosis 你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;…

2.2 Python变量与数据类型

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

好用到哭的翻译工具,百度翻译领衔,2024新宠来袭!

在全球化的浪潮中&#xff0c;语言障碍已经越来越不是问题了&#xff0c;翻译工具就像是我们的文化差异跨越助手。今天&#xff0c;我们就来聊聊几款翻译界的佼佼者&#xff0c;它们各有千秋&#xff0c;让我们的多语言之旅变得更加轻松。百度翻译算是其中的佼佼者&#xff0c;…

【机器学习】BP神经网络正向计算

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 BP神经网络正向计算1. 引言2. BP神经网络结构回顾3. 正向计算的基本原理4. 数学…

微信小程序通过code换取手机号

一、调用小程序验证组件&#xff0c;这两个组件都是可以文档地址。 二、首先还是得先拿到code &#xff08;1&#xff09;、必须在手机端去执行&#xff0c;开发者工具获取不到code。解决办法&#xff1a;将拿到的code在页面上渲染出来在复制一下就好了。 &#xff08;2&#…

文件上传漏洞(一,漏洞简介及简单利用)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 一&#xff0c;文件上传漏洞简介。 1&#xff0c;什么是文件上传漏洞。 文件上传漏洞&#xff0c;是指web应用允许用户上传诸如&#xff1a;木马&#xff0c;病毒&#xff0c;执行…

红酒与北美烧烤:自由的味蕾之旅

在繁星点点的夜空下&#xff0c;一场红酒与北美烧烤的盛宴悄然展开。这不是简单的味觉碰撞&#xff0c;而是一场自由的味蕾之旅&#xff0c;洒派红酒&#xff08;Bold & Generous&#xff09;与北美烧烤的结合&#xff0c;如同诗与远方的交汇&#xff0c;温柔而引人入胜。 …

产品经理-​如何做需求的优先级排序和版本规划(30)

如何做需求的优先级排序&#xff1f;如何做产品的版本规划&#xff1f;思考逻辑是什么&#xff1f; 需求优先级分析、产品版本规划 需求的分析和管理是产品经理的最核心技能&#xff0c;没有之一 作为一名产品经理&#xff0c;工作的产出物就是需求文档&#xff0c;在整个需求文…

制造知识普及(八)--企业内部物料编码(IPN)与制造商物料编码(MPN)

1、什么是物料编码 通常情况下&#xff0c;物料编码分两种&#xff0c;一种是企业内部物料编码&#xff08;IPN&#xff09;&#xff0c;由于在企业研发制造和生产中确认物料唯一性的&#xff0c;用于承载设计参数要求和技术要求。另一种是制造商物料编码&#xff08;MPN&…

【扒代码】ope.py

文件目录&#xff1a; 引用方式 if not self.zero_shot: # 非零样本情况下&#xff0c;计算边界框的宽度和高度 box_hw torch.zeros(bboxes.size(0), bboxes.size(1), 2).to(bboxes.device) box_hw[:, :, 0] bboxes[:, :, 2] - bboxes[:, :, 0] # 宽度 box_hw[:, :, 1] bbox…

html+css 实现hover中间展开背景

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目…

kickstart自动安装脚本制作并搭建pxe网络环境

目录 准备工作&#xff1a; 安装图形化kickstart自动安装脚本的工具 安装httpd 搭建DHCP服务 搭建pxe网络安装环境&#xff0c;实现服务器自动部署 pxe原理&#xff1a; 安装所需软件包 测试&#xff1a; 准备工作&#xff1a; 1、准备一台rhel7的主机,并开启主机的图形。 …