python-第三方库-[yarl、yaml]

python-第三方库-[yarl、yaml]

  • 一: yarl
    • 1> yarl 介绍
    • 2> yarl.URL 介绍
      • 1. yarl.URL 的语法格式
      • 2. yarl.URL demo
      • 3. yarl.URL.build()
      • 4. yarl.URL().with_*()
      • 5. yarl.URL().update_query()
      • 6> url / &%组合
  • 二:yaml
    • 1> yaml 介绍
    • 2> yaml 基本规则
      • 1. 数据结构介绍
        • 普通样式、单/双引号样式
        • 字面样式(literal )
        • 折叠样式(folded)
        • Mappings(映射)
      • 2. 语法锚点和引用
        • 定义锚点&引用锚点
        • 锚定映射&序列节点
        • 合并映射-merge key
      • 3. yaml tag
        • tag 介绍
        • 自定义tag
    • 3> yaml demo
      • 1. yaml.load
      • 2. yaml.load Unicode&yaml.Loader
      • 3. yaml.dump&Unicode
      • 4. yaml.load_all
      • 5. yaml 与编码对象class
      • 6. yaml 多个编码对象class
      • 7. yaml.safe_load
    • 4> yaml 三大组件
        • 1. 构造器、表示器、解析器 介绍
        • 2. 构造&转存
        • 3. 序列化构造器
        • 4. 自定义构造器
    • 5> yaml引用环境变量
    • 6> libyaml
    • 7> FAQ
      • 1. yaml.safe_load&load区别

一: yarl

1> yarl 介绍

URL介绍:统一资源定位符,它是用来表示互联网上的某个资源地址,互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它;
yarl :yarl 库是一个强大的工具,用于处理 URL(统一资源定位符);
yarl作用:提供了简单且灵活的 API,使得 URL 的解析、构建和操作变得简单;

2> yarl.URL 介绍

from yarl import URL

1. yarl.URL 的语法格式

在这里插入图片描述

URL 的语法格式:
protocol://hostname[:port]/path[?query][#fragment]
part含义注释
protocol指网络传输协议以下是经常用到的几个协议;
http,通过 HTTP 协议访问该资源,格式 http://;
https,通过安全的 HTTPS 协议访问该资源, 格式 https://;
file,资源是本地计算机上的文件,格式 file://
ftp,通过 FTP访问资源,格式 FTP://
hostname主机名指存放资源的服务器的域名、主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname)
port端口号port 是一个可选的整数,它的取值范围 是 0-65535。如果 port 被省略时就使用默认端口,各种传输协议都有默认的端口号,如 http 的默认端口为 80,https 的端口是 443;
path路由地址由零个或多个/符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。路由地址决定了服务端如何处理这个请求;
query查询从?开始到#为止,它们之间的部分就是参数,又称搜索部分或者查询字符串。这个部分允许有多个参数,参数与参数之间用&作为分隔符;下面demo 为:spm=1011.2124.3001.5298
fragment信息片断它用于指定网络资源中的片断,例如一个网页中有多个名词解释,那么可使用 fragment 直接对它们定位

2. yarl.URL demo

from yarl import URLurl_string = "https://mp.csdn.net/mp_blog/manage/article?spm=1011.2124.3001.5298"
url = URL(url_string)print(url)
print(url.scheme)
print(url.host)
print(url.port)
print(url.authority)print(url.path)
print(url.query)
print(url.query_string)print(url.user)
print(url.password)
=======================
https://mp.csdn.net/mp_blog/manage/article?spm=1011.2124.3001.5298
https
mp.csdn.net
443
mp.csdn.net:443
/mp_blog/manage/article
<MultiDictProxy('spm': '1011.2124.3001.5298')>
spm=1011.2124.3001.5298None
None

3. yarl.URL.build()

from yarl import URLurl = URL.build(scheme='https',host='mp.csdn.net',port=443,path='/mp_blog/manage/article',query={'spm': '1011.2124.3001.5298'})
print(url)
===============
https://mp.csdn.net:443/mp_blog/manage/article?spm=1011.2124.3001.5298

4. yarl.URL().with_*()

with_scheme、with_user 、with_password 、with_host 、with_port、with_path、with_query、with_fragment、with_name

with_*() 单步骤构建

from yarl import URLurl = URL.build(scheme='https',host='mp.csdn.net',port=443,path='/mp_blog/manage/article',)
query = {'spm': '1011.2124.3001.5298'}print(url.with_query(query))

with_().with_()多步骤构建url

from yarl import URLurl = URL.build(scheme='https',host='mp.csdn.net',port=443,)
print(url)
query = {'spm': '1011.2124.3001.5298'}
print(url.with_path('/mp_blog/manage/article').with_query(query))
============================
https://mp.csdn.net:443
https://mp.csdn.net:443/mp_blog/manage/article?spm=1011.2124.3001.5298

5. yarl.URL().update_query()

url.with_query(query):清除之前的query 信息;

from yarl import URLurl = URL.build(scheme='https',host='mp.csdn.net',port=443,path='/mp_blog/manage/article',query = {'spm': '1011.2124.3001.5298'})query = {'xxx': '127.0.0.1', '***': '128.0.0.1'}
print(url.with_query(query))
===================
https://mp.csdn.net:443/mp_blog/manage/article?xxx=127.0.0.1&***=128.0.0.1

url.update_query(query):对之前存在信息进行更新;

from yarl import URLurl = URL.build(scheme='https',host='mp.csdn.net',port=443,path='/mp_blog/manage/article',query = {'spm': '1011.2124.3001.5298'})query = {'xxx': '127.0.0.1', '***': '128.0.0.1'}
print(url.update_query(query))
=============================
https://mp.csdn.net:443/mp_blog/manage/article?spm=1011.2124.3001.5298&xxx=127.0.0.1&***=128.0.0.1

6> url / &%组合

from yarl import URL
url = (
URL('https://mp.csdn.net')/
'mp_blog/manage/article'%
{'spm': '1011.2124.3001.5298'}
)print(url)
=====================
https://mp.csdn.net/mp_blog/manage/article?spm=1011.2124.3001.5298

二:yaml

1> yaml 介绍

Yaml :Yaml 是一种人类可读的数据序列化语言,通常用于存储项目中的配置文件;例如 docker 和 k8s 都使用 Yaml 文件定义部署信息;类似于 json 数据,但 Yaml 的格式更加丰富,可以存储更复杂的数据结构

2> yaml 基本规则

规则说明
层级关系yaml 的层级关系通过缩进表示,缩进空格数没有规定,但同层级的缩进必须一致。建议全局使用相同的缩进空格数;
存储数据yaml 使用键值对的方式存储数据。 - 在键值对的值前面添加 - 符号表示这个键的值是一个列表

1. 数据结构介绍

YAML中,有3种基本的数据结构:Scalars(标量)、Sequences(序列)和Mappings(映射)

数据结构说明举例
Scalars标量是单个的、不可再分的值。标量可以是字符串、数字、布尔值、null、日期等1. 普通样式、单/双引号样式
2. 字面样式(literal )
3. 折叠样式(folded)
序列(Sequences)序列是一组按次序排列的值,每一个元素都可以是任意数据类型连字符-开头的行构成一个序列;
- A
- B
- C
==>
key: [A, B, C]
Mappings(映射)映射是一种键值对的集合,其中每个键都必须唯一每个键值对用冒号+一个空格分隔(key: value)
普通样式、单/双引号样式
import yamldocument = """
爱好1: 喝酒唱歌
爱好2: '喝酒唱歌'
"""res = yaml.load(document, Loader=yaml.Loader)
print(res)
============
{'爱好1': '喝酒 唱歌', '爱好2': '喝酒\n唱歌'}
字面样式(literal )
import yamldocument = """
爱好1: |喝酒唱歌
爱好2: '喝酒唱歌'
"""res = yaml.load(document, Loader=yaml.Loader)
print(res)
=====================
{'爱好1': '喝酒\n唱歌\n', '爱好2': '喝酒\n唱歌'}
折叠样式(folded)
import yamldocument = """
爱好1: >喝酒唱歌
爱好2: '喝酒唱歌'
"""res = yaml.load(document, Loader=yaml.Loader)
print(res)
==============
{'爱好1': '喝酒 唱歌\n', '爱好2': '喝酒\n唱歌'}
Mappings(映射)
import yamldocument = """
爱好1: 喝酒
爱好2: 唱歌
"""
res = yaml.load(document, Loader=yaml.Loader)
print(res)
============
{'爱好1': '喝酒', '爱好2': '唱歌'}

2. 语法锚点和引用

编程中我们通常用变量引用来解决这种问题,YAML也提供了一种类似的机制实现变量引用,它就是锚点引用(Anchors and Aliases);例如:同的数据被重复使用, 配置信息,

定义锚点&引用锚点
import yamldocument = """
key: &anchor pig
key2: *anchor
key3: *anchor
"""
'''
1. 使用 & 符号可以定义一个锚点
2. * 符号+锚点名 可以引用先前定义的锚点
'''
res = yaml.load(document, Loader=yaml.Loader)
print(res)
=================
{'key': 'pig', 'key2': 'pig', 'key3': 'pig'}
锚定映射&序列节点
import yamldocument = """
# 定义一个共享的内容
common_data: &anchor_idname: Common Namevalue: Common Value# 使用锚定引用共享内容
nodes:- *anchor_id- *anchor_id"""'''
1. common_data: &anchor_id: 是一个锚定的名字,它指向一个映射(即键值对的集合)
2. *anchor_id 是一个别名,用来引用先前定义的那个映射
3. nodes 是一个list, 引用anchor_id
'''
res = yaml.load(document, Loader=yaml.Loader)
print(res)=================
{'common_data': {'name': 'Common Name', 'value': 'Common Value'}, 'nodes': [{'name': 'Common Name', 'value': 'Common Value'}, {'name': 'Common Name', 'value': 'Common Value'}]}
合并映射-merge key

YAML提供了一种<<语法用于合并映射(Mappings)。它允许你将一个映射的键值对合并到另一个映射中,从而实现映射之间的继承和合并。这种语法也被称为"merge key";
提高代码的可维护性和可读性。这对于定义共享的配置或基本设置,并在派生配置中进行定制化非常有用

import yamldocument = """
base: &tmp_basename: Johnage: 30
extension:<<: *tmp_baseage: 31city: New York 
"""# 在base基础上update extension 信息res = yaml.load(document, Loader=yaml.Loader)
print(res)
===================
{'base': {'name': 'John', 'age': 30}, 'extension': {'name': 'John', 'age': 31, 'city': 'New York'}}

3. yaml tag

AML中,标签(Tags)用于对数据进行类型标识或自定义标识。它们提供了一种扩展YAML数据模型的方式;

tag 介绍
tag说明demo
!!str标识字符串类型name: !!str John
!!int标识整数类型count: !!int 10
!!float标识浮点数类型pi: !!float 3.1415926
!!bool标识布尔类型is_valid: !!bool true
!!null标识nulldata: !!null
隐式tag隐式声明boolean: !!bool “true”
integer: !!int “3”
显式tag显式声明boolean: true
integer: 3
自定义tag
yaml tagpython type
!!nullNone
!!boolbool
!!intint or long (int in Python 3)
!!floatfloat
!!binarystr (bytes in Python 3)
!!timestampdatetime.datetime
!!omap, !!pairslist of pairs
!!setset
!!strstr or unicode (str in Python 3)
!!seqlist
!!mapdict
Python-specifictags
!!python/noneNone
!!python/boolbool
!!python/bytes(bytes in Python 3)
!!python/strstr (str in Python 3)
!!python/unicodeunicode (str in Python 3)
!!python/intint
!!python/longlong (int in Python 3)
!!python/floatfloat
!!python/complexcomplex
!!python/listlist
!!python/tupletuple
!!python/dictdict

3> yaml demo

配置文件用 .yaml 或者 .py 形式如下

1. yaml.load

import yamldocument = """
conv_001:op_list:- Conv2d- Conv2dcreat_params:selector: - F- Flayer1:in_channels: 1out_channels: 1kernel_size: 3stride: 2padding: 1groups: 1layer2:in_channels: 1out_channels: 2kernel_size: 3stride: 4padding: 1groups: 1quant_params:data_num: 1inputShape: - [1, 1, 224, 8]
"""res = yaml.load(document, Loader=yaml.Loader)
print(res)
print(type(res))
=======================
{'conv_001': {'op_list': ['Conv2d', 'Conv2d'], 'creat_params': {'selector': ['F', 'F'], 'layer1': {'in_channels': 1, 'out_channels': 1, 'kernel_size': 3, 'stride': 2, 'padding': 1, 'groups': 1}, 'layer2': {'in_channels': 1, 'out_channels': 2, 'kernel_size': 3, 'stride': 4, 'padding': 1, 'groups': 1}}, 'quant_params': {'data_num': 1, 'inputShape': [[1, 1, 224, 8]]}}}
<class 'dict'>

2. yaml.load Unicode&yaml.Loader

使用 Loader=yaml.Loader 实现Unicode

import yamldocument = """
姓名: 小明,
爱好:- 喝酒- 唱歌- 赌牌- 打游戏
"""res = yaml.load(document, Loader=yaml.Loader)
print(res)
print(type(res))

3. yaml.dump&Unicode

import yaml
import osdocument = """
姓名: 小明,
爱好:- 喝酒- 唱歌- 赌牌- 打游戏
"""res = yaml.load(document, Loader=yaml.Loader)
document_name = f'document.yaml'
with open(document_name, 'w') as file:yaml.dump(res, file, default_flow_style=False, encoding='utf-8', allow_unicode=True)
'''
数据中包含中文等 Unicode 字符,yaml.dump() 会将它们编码成不可读的表示方式。为了解决这个问题,
可以添加三个关键字参数,使中文等 Unicode 字符以可读形式保存,default_flow_style, encoding, allow_unicode
'''
print(os.path.exists(document_name))
with open(document_name, 'r') as f:res_load = yaml.load(f, Loader=yaml.Loader)
print(res_load)
===================
True
{'姓名': '小明,', '爱好': ['喝酒', '唱歌', '赌牌', '打游戏']}

4. yaml.load_all

aml文档中,使用 — 符号可以分段。对于带有分段的Yaml文档,使用 yaml.load() 函数会报错,需要使用 yaml.load_all() 函数;

import yamldocument = """
姓名: 小明,
爱好:- 喝酒- 唱歌- 赌牌- 打游戏
---
姓名: 小红,
爱好:- 写字- 看书
"""res = yaml.load_all(document, Loader=yaml.Loader)
print(type(res))
for i in res:print(i)
====================
<class 'generator'>
{'姓名': '小明,', '爱好': ['喝酒', '唱歌', '赌牌', '打游戏']}
{'姓名': '小红,', '爱好': ['写字', '看书']}

5. yaml 与编码对象class

import yamlclass Anmails:def __init__(self, name, likes):self.name = nameself.likes = likesdef __repr__(self):return f'{self.__class__.__name__}(name={self.name}, like={self.likes})'def like(self):print(f'我是{self.name},我喜欢{str(self.likes)}! ')to_do = Anmails('猪', ['喝酒', '唱歌', '赌牌', '打游戏'])
document = yaml.dump(to_do)
like_A = yaml.load(document, Loader=yaml.Loader)
print(yaml.dump(to_do))
print(like_A)
print(type(like_A))
like_A.like()
=======================
!!python/object:__main__.Anmails
likes:
- "\u559D\u9152"
- "\u5531\u6B4C"
- "\u8D4C\u724C"
- "\u6253\u6E38\u620F"
name: "\u732A"Anmails(name=猪, like=['喝酒', '唱歌', '赌牌', '打游戏'])
<class '__main__.Anmails'>
我是猪,我喜欢['喝酒', '唱歌', '赌牌', '打游戏']!

6. yaml 多个编码对象class


import yamlclass Anmails:def __init__(self, name, likes):self.name = nameself.likes = likesdef __repr__(self):return f'{self.__class__.__name__}(name={self.name}, like={self.likes})'def like(self):print(f'我是{self.name},我喜欢{str(self.likes)}! ')to_do1 = Anmails('猪', ['喝酒', '唱歌', '赌牌', '打游戏'])
to_do2 = Anmails('de-lovely', ['写字', '看书'])
document_name = r'document.yaml'
with open(document_name, 'w') as f:yaml.dump_all([to_do1, to_do2], f, default_flow_style=False, encoding='utf-8', allow_unicode=True)==============
document.yaml:
!!python/object:__main__.Anmails
likes:
- 喝酒
- 唱歌
- 赌牌
- 打游戏
name: 猪
--- !!python/object:__main__.Anmails
likes:
- 写字
- 看书
name: de-lovely

7. yaml.safe_load

import yamldocument_name = 'document.yaml'
with open(document_name, 'r') as f:# case_params = yaml.load(f, Loader=yaml.Loader)case_params = yaml.safe_load(f)
print(case_params)#修改参数
case_params['conv_001']['creat_params']['layer1']['groups'] = 2
case_params['conv_001']['op_list'][0] = 'Conv3d'
#保存参数
with open('document_currect.yaml', 'w') as file:yaml.dump(case_params, file)

在这里插入图片描述

4> yaml 三大组件

1. 构造器、表示器、解析器 介绍
组件功能描述
Constructors(构造器)用于将 YAML 数据解析为 Python 对象的组件,将 YAML 数据的不同类型转换为相应的 Python 对象。PyYAML 提供了一些内置的构造器,用于处理常见的数据类型,如字符串、整数、浮点数、布尔值等。同时,你也可以自定义构造器,以便将 YAML 数据解析为自定义的 Python 类型。通过注册构造器,你可以扩展 PyYAML 的解析功能,使其能够处理更多的数据类型;
Representers(表示器)与构造器相反,Representers 是用于将 Python 对象表示为 YAML 数据的组件,它们负责将 Python 对象转换为 YAML 中的相应表示形式PyYAML 提供了一些内置的表示器,用于处理常见的 Python 对象类型,如字符串、整数、浮点数、布尔值等。同时,你也可以自定义表示器,以便将自定义的 Python 类型表示为 YAML 数据。通过注册表示器,你可以定制 PyYAML 的转储功能,使其能够生成符合特定需求的 YAML 数据。
Resolvers(解析器)Resolvers 是用于解析 YAML 数据中的标签(Tags)的组件,它们负责识别标签并将其映射到相应的构造器和表示器PyYAML 提供了内置的标签解析器,用于处理常见的标准类型。同时,你也可以自定义解析器,以便识别和处理自定义的标签。通过注册解析器,你可以扩展 PyYAML 的标签识别功能,使其能够处理更多的数据类型和标签;
2. 构造&转存
import yamlclass Introduce(yaml.YAMLObject):yaml_tag = u'!Introduce'def __init__(self, name, likes):self.name = nameself.likes = likesdef __repr__(self):return f'{self.__class__.__name__}(name={self.name}, {self.likes})'document = """
!Introduce
name: xiaoming
likes:- games
"""
'''
1. !Introduce: 定义一个YAML标签用于解析和生成Monster类型数据
2. yaml.dump(res): 转储Monster对象为YAML格式数据
'''
res = yaml.load(document, Loader=yaml.Loader)
print(res)
print(type(res))
document_cp = yaml.dump(res)
print(document_cp)
=================
Introduce(name=xiaoming, ['games'])
<class '__main__.Introduce'>
!Introduce
likes:
- games
name: xiaoming
3. 序列化构造器
import yamlclass Dice(tuple):def __new__(cls, a, b):return tuple.__new__(cls, [a, b])def __repr__(self):return "Dice(%s,%s)" % selfdef dice_representer(dumper, data):return dumper.represent_scalar(u'!dice', u'%sd%s' % data)yaml.add_representer(Dice, dice_representer)
res = yaml.dump(Dice(3,6))
print(res)
============
!dice '3d6'无:# yaml.add_representer(Dice, dice_representer)
=========================
!!python/object/new:__main__.Dice
- !!python/tuple- 3- 6
4. 自定义构造器
import yamlclass Dice(tuple):def __new__(cls, a, b):return tuple.__new__(cls, [a, b])def __repr__(self):return "Dice(%s,%s)" % selfdef dice_representer(dumper, data):return dumper.represent_scalar(u'!dice', u'%sd%s' % data)def dice_constructor(loader, node):value = loader.construct_scalar(node)a, b = map(int, value.split('d'))return Dice(a, b)yaml.add_constructor(u'!dice', dice_constructor)res = yaml.load("initial hit points: !dice 8d4", yaml.Loader)
print(res)
==========
{'initial hit points': Dice(8,4)}

5> yaml引用环境变量

import yaml
import osdef render_env_constructor(loader, node):value = loader.construct_scalar(node)return os.path.expandvars(value)yaml.SafeLoader.add_constructor('!ENV', render_env_constructor)os.environ["a"]="111"
os.environ["b"]="222"
res = yaml.safe_load("test: !ENV a=${a}, b=$b")
#加载YAML时自动替换了标签!ENV标识标量的环境变量占位符
print(res)
=======
{'test': 'a=111, b=222'}

环境变量通常都是字符串形式。如果你使用了数字、布尔等其他类型,需要解析后手动转换。
os.path.expandvars是一个内置函数,用于展开字符串中的环境变量。它会在目标字符串中查找形式为 V A R 或 VAR或 VAR{VAR}的环境变量引用,并将其替换为响应的环境变量的值。如果找不到匹配的环境变量,那么引用保持不变

6> libyaml

libyaml介绍
libyaml库libyaml是一个独立的C库,用于处理 yaml数据的解析和生成。Pyyaml 可以使用 LibYAML 作为其解析和生成 yaml 数据的底层引擎;
特点LibYAML 具有高性能、低内存占用、加速 yaml数据处理
组件提供 CLoader 和 CDumper 两个组件用来集成 LibYAML;
CLoader: PyYAML 的解析器(Loader)的C扩展版本
CDumper: PyYAML的生成器(Dumper)的C扩展版本
CLoader和CDumper优势1. 通过与LibYAML的集成,提供了更高效的解析和生成功能;
2. 处理大型YAML数据时获得更好的性能和效率

7> FAQ

1. yaml.safe_load&load区别

load: Loader支持加载任意的Python对象,可能导致执行任意 Python 代码
safe_load:SafeLoader 限制了加载过程中执行的操作,只允许加载基本类型的对象,如字符串、整数、列表和字典等;当你处理来自不受信任的源或不确定性的 YAML 文件时,特别是从外部来源加载时,使用 SafeLoader 是一个良好的实践,可以提高安全性并防止可能的代码注入或其他潜在的安全问题

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

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

相关文章

Spring入门之AOP(包含实例代码)

目录 什么是spring AOPAOP的优势AOP的底层原理AOP的相关术语AOP的应用切入点表达式格式注意问题 通知类型 代码示例1. 导入Maven项目依赖2. 准备一个实体类&#xff08;先定义接口再实现&#xff09;3. 定义切面类4. 准备配置文件5. 准备测试类6. 测试结果6.1 方法正常运行6.2 …

同三维TM6-6 有线6级联会议麦克风详情介绍

同三维TM6-6 有线6级联会议麦克风 信息通讯类智能阵列麦克风 有线传输&#xff0c;强抗干扰、可级联、长续航、低延时 6个麦克风级联&#xff0c;通过3.5音频线级联, 可以同时使用3.5mm LINE IN/OUT、USB有线连接PC端&#xff0c;每条音频线是3米&#xff0c;可应用在视频会…

阶跃星辰推出Step-1X:让你的想象力插上翅膀

阶跃星辰 在人工智能快速发展的今天&#xff0c;AI绘画技术正以惊人的速度不断突破创新。就在不久前&#xff0c;阶跃星辰在2024世界人工智能大会上发布的Step-1X图像生成大模型。让我们一起走进Step-1X的世界&#xff0c;看看它如何为我们的想象力插上翅膀。 Step-1X Step-1X …

vue3中ref绑定的节点顺序错乱

问题复现 眨眼睛这个是修正过了的&#xff0c;小友的应该是ref直接绑定navigationTextList对吧&#xff0c; 按正常想法肯定是既然这个数组会动态更新&#xff0c;我只需要index不就能确定是哪个节点啦&#xff0c;倘若只是静态数据应该不会有什么问题&#xff0c; ⚠️但如果出…

湖南省工业废水高氯酸盐排放新标准解析与技术应对策略

随着工业化进程的加快&#xff0c;环境污染问题变得尤为突出。特别是在某些特定行业产生的污染物&#xff0c;如高氯酸盐&#xff0c;因其对环境和人体健康的潜在危害&#xff0c;越来越受到关注。为了解决这一问题&#xff0c;湖南省生态环境厅与省市场监督管理局联合制定了《…

网络层 IV(ARP、DHCP、ICMP)【★★★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、地址解析协议&#xff08;ARP&#xff09;&#xff08;★★&#xff09; 在局域网中&#xff0c;由于硬件地址已固化在网卡上的 ROM 中&#xff0c;因此常常将…

PPT图表制作不再难!这款在线PPT软件让办公更简单!

ppt图表怎么制作&#xff1f; 在当下注重视觉呈现的数字化时代&#xff0c;有效的信息传递和数据可视化变得越来越重要。不管是商业演示、学术报告还是项目汇报&#xff0c;一份精心制作的PPT演示文稿&#xff0c;往往能够起到事半功倍的效果。其中&#xff0c;图表作为PPT中不…

C++ ─── List的模拟实现

一&#xff0c; List的模拟实现 List 是一个双向循环链表,由于List的节点不连续&#xff0c;不能用节点指针直接作为迭代器&#xff0c;因此我们要对结点指针封装&#xff0c;来实现迭代器的作用。 迭代器有两种实现方式&#xff0c;具体应根据容器底层数据结构实现&#xff1…

Linux 进程概念 进程状态 fock函数讲解

PID和PPID 我如果想获取自己的PID呢&#xff1f; pid_t getpid(void);头文件:#include<sys/types.h> #include<unistd.h> 返回调用这个函数的进程ID(自己的PID) PID一般会变化 如何获取PPID? pid_t getppid(void);(父ID)头文件:#include<sys/types.h>…

提高 Web 应用程序安全性的标准

开放式 Web 应用程序安全项目 (OWASP) 是一个国际非营利组织&#xff0c;致力于为任何有兴趣提高 Web 应用程序安全性的人提供免费文档、工具、视频和论坛。 OWASP 最初成立为开放式 Web 应用程序安全项目&#xff0c;并于 2004 年注册为非营利性慈善机构&#xff0c;提供有关…

redis学习(011 实战:黑马点评:优惠券秒杀:redis实现全局唯一ID)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第48p-第p49的内容 文章目录 全局唯一ID编码 全局唯一ID //String did dao.haveKeyId(“deputybedthing”); 这里的主键并没有…

LeetCode—string练习

415.字符串相加 . - 力扣&#xff08;LeetCode&#xff09; 错误示范&#xff1a; 遇到这种我们第一想法就是将字符串转化成整数&#xff0c;但这种解法无法提交通过&#xff0c;只能支持将小数字互相转化&#xff0c;遇到较长的字符串就没法通过。 class Solution { public…

基于FPGA实现SD NAND FLASH的SPI协议读写

基于FPGA实现SD NAND FLASH的SPI协议读写 在此介绍的是使用FPGA实现SD NAND FLASH的读写操作&#xff0c;以雷龙发展提供的CS创世SD NAND FLASH样品为例&#xff0c;分别讲解电路连接、读写时序与仿真和实验结果。 目录 1 FLASH背景介绍 2 样品申请 3 电路结构与接口协议 …

基于微信小程序在线订餐系统

微信小程序在线订餐系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序在线订餐系统的开发全过程。通过分析微信小程序在线订餐系统管理的不足&#xff0c;创建了一个计算机管理微信小程序在线订…

免费下载Win11 24H2专业版!附详细安装教程

今日&#xff0c;系统之家小编给大家带来2024年最新的Windows11 24H2专业版系统&#xff0c;更新后系统版本号将升至26100.1591。系统基于微软官方最新Windows 11 24H2专业版进行离线制作与优化&#xff0c;确保系统安全无毒&#xff0c;兼容性强&#xff0c;可完美支持新老机型…

解锁高效项目管理:精选软件项目管理工具与技术实战

在当今快节奏的商业环境中&#xff0c;项目管理不仅是确保任务按时完成的手段&#xff0c;更是企业战略规划与执行的核心。面对日益复杂的项目需求和不断变化的市场环境&#xff0c;传统的手工管理方式已难以满足高效协同的要求。此时&#xff0c;项目管理软件作为数字化时代的…

【数据推荐】我国省市县三级的人口受教育状况数据(分年龄\性别\户籍)

人口数据是我们在各项研究中都经常使用的数据。之前我们为大家分享过基于《2020中国人口普查分县资料》整理的全国范围的第七次人口普查人口数据&#xff0c;具体包括如下8个分表&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff1a; 表1&#xff1a;我国省市县三…

只会SQL语句,可以做什么工作?

1、SQL是什么 首先简单介绍一下SQL&#xff08;Structured Query Language&#xff09;&#xff0c;是一种可以进行数据提取、聚合、分析&#xff0c;并对数据库进行构建和修改的编程语言。 相对来说&#xff0c;SQL上手非常容易&#xff0c;因为语法结构比较固定&#xff0c…

iOS分渠道统计不再难,Xinstall帮你轻松搞定

在App推广和运营的过程中&#xff0c;iOS分渠道统计一直是一个令人头疼的问题。如何准确追踪各个渠道的推广效果&#xff1f;如何优化投放策略以提高转化率&#xff1f;这些问题困扰着无数推广者。今天&#xff0c;我们就来聊聊Xinstall这款强大的分渠道统计工具&#xff0c;看…

llama_factory Qlora微调异常 No package metadata was found for The ‘autoawq‘

importlib.metadata.PackageNotFoundError: No package metadata was found for The ‘autoawq’ distribution was not found and is required by this application. To fix: pip install autoawq 其实问题比较简单 直接安装autoawq 即可 但是对应会有版本问题&#xff1a; 查…