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

Python字符串及正则表达式(十):字符串常用操作、字符串编码转换

前言:在编程的世界里,字符串无处不在。它们是构建用户界面、存储数据、进行通信的基础元素。无论是财务系统的总账报表、电子游戏的比赛结果,还是火车站的列车时刻表,这些信息最终都需要以文本的形式呈现给用户。这些文本的背后,是程序经过精确计算、逻辑判断和数据整理的结果,它们将复杂的数据转化为直观易懂的文本信息。正如一位经验丰富的程序员所说:“开发一个项目,基本上就是在不断地处理字符串。”

在本章节中,我们将详细介绍如何高效地操作字符串,包括但不限于字符串的分割、连接、替换和格式化等。同时,我们也会探讨字符串编码的转换,这对于处理不同语言和字符集的数据尤为重要。通过这些内容的学习,你将能够更加灵活地处理字符串数据,为你的项目开发提供强大的支持。让我们开始这段深入探索Python字符串吧。

一、字符串常用操作

Python 中的字符串操作是非常丰富和灵活的。以下是一些常用的字符串操作:

1、拼接字符串:

使用 + 操作符来拼接两个或多个字符串。

str1 = "Hello"
str2 = "World"
result = str1 + " " + str2  
print(str1 + str2)# 结果为 "Hello World"

注意字符串不允许和其他类型的数据拼接,如使用下列的代码将字符串与数值拼接在一起将会报错

str1 = '我今天一共走了'        # 定义字符串
num = 16058                   # 定义一个整数
str2 = '步'                   # 定义字符串
print(str1 + num + str2)      # 对字符串和整数进行拼接

改进后:

str1 = '我今天一共走了'             # 定义字符串
num = 16058                        # 定义一个整数
str2 = '步'                        # 定义字符串
print(str1 + str(num) + str2)      # 对字符串和整数进行拼接

实例训练34 -使用字符串拼接输出一个关于程序员的笑话

programmer_1 = '程序员甲:搞IT太累了,我想换行......怎么办?'
programmer_2 = '程序员乙:敲以下回车键'
print(programmer_1 + '\n' + programmer_2)

2、计算字符串的长度:

由于不同的字符所占字节数不同,所以要计算字符串的长度,需要先了解各字符所占的字节数。在Python 中,数字、英文、小数点、下划线和空格占一个字节;一个汉字可能会占 2~4个字节,占几个字节取决于采用的编码。汉字在 GBK/GB2312编码中占2个字节,在 UTF-8humicode 编码中一般占用3个字节(或4个字节)。
使用 len() 函数来获取字符串的长度。

str = "Hello,World"
length = len(str)  
print(length)   # 结果为 11

中文字符串说明

str1 = '人生苦短,我用Ptyhon!'  # 定义字符串
length = len(str1)            # 计算字符串的长度
print(length)           # 结果为 14

上面的代码在执行后,将输出结果14。从上面的结果中可以看出,在默认的情况下,通过len()函数计算字符串的长度时,不区分英文、数字、和汉字,所有字符都按一个字符计算。
在实际开发时,有时需要获取字符串实际所占的字节数,即如果采用UTF-8编码,汉字占3个字节,采用GBK或者GB2312时,汉字占2个字节。这时,可以通过使用encode()方法(进行编码后再进行获取。例如,如果要获取采用UTF-8编码的字符串的长度,可以使用下面的代码:

str1 = '人生苦短,我用Ptyhon!'      # 定义字符串
length = len(str1.encode())       # 计算UTF-8编码的字符串的长度
print(length)          # 结果为 28

上面的代码在执行后,将显示“28”。这是因为汉字加中文标点符号共7个,占21个字节,英文字母和英文的标点符号占7个字节,共28个字节。

如果要获取采用 GBK编码的字符串的长度,可以使用下面的代码:

str1 = '人生苦短,我用Ptyhon!'          # 定义字符串
length = len(str1.encode('gbk'))       # 计算UTF-8编码的字符串的长度
print(length)          # 结果为 21

上面的代码在执行后,将显示“21”。这是因为汉字加中文标点符号共7个,占14个字节,英文字母和英文的标点符号占7个字节,共28个字节。

3、截取字符串:

由于字符串也属于序列,所以要截取字符串,可以采用切片方法实现。通过切片方法截取字符串的语法格式如下:
string[start : end : step]
参数说明:

  • string:表示要截取的字符串。
  • start:表示要截取的第一个字符的索引(包括该字符),如果不指定,则默认为0。
  • end:表示要截取的最后一个字符的索引(不包括该字符),如果不指定则默认为字符串的长度
  • step:表示切片的步长,如果省略,则默认为1,当省略该步长时,最后一个冒号也可以省略。
    使用切片操作来截取字符串的一部分。
    str = "Hello World"
    substr = str[0:5]  # 结果为 "Hello"
    

拓展:

索引012345678910111213
字符Python!

在编程中,字符串通常以0作为第一个字符的索引,这在大多数编程语言中都是通用的。在上表中,“人” 是字符串的第一个字符,其索引为0,而 “!” 是最后一个字符,其索引为13。

str1 = '人生苦短,我用Ptyhon!'            # 定义字符串
substr1 = str1[1]                       # 截取第2个(索引1)字符
substr2 = str1[5:]                      # 从第6个(索引5)字符截取
substr3 = str1[:5]                      # 从左边开始截取5个(索引4)字符
substr4 = str1[2:5]                     # 截取第3个(索引2)到第5个(索引4)字符
print('原字符串: ',str1)
print(substr1 + '\n' + substr2 + '\n' + substr3 + '\n' + substr4)   

捕获异常范例

str1 = '人生苦短,我用Ptyhon!'            # 定义字符串
substr1 = str1[15]                      # 截取第15个字符
print(substr1) 


解决方法:采用try...except语句捕获异常:

str1 = '人生苦短,我用Ptyhon!'            # 定义字符串
try:substr1 = str1[15]                  # 截取第15个字符
except IndexError:print('指定的索引不存在')

4、分割字符串:

字符串对象的 split() 方法用于将一个字符串按照指定的分隔符切分为字符串列表。该列表中的元素不包括分隔符。split() 方法的语法格式如下:

str.split(sep, maxsplit)

参数说明:

str: 需要进行分割的字符串。
sep: 指定的分隔符,可以是多个字符。默认为 None,即会将所有空字符(包括空格、换行符 \n、制表符 \t 等)作为分隔符。
maxsplit: 可选参数,用于指定分割的次数。如果不指定或设为 -1,则表示分割次数没有限制;否则,返回结果列表的元素个数最多为 maxsplit + 1
返回值: 分隔后的字符串列表。该列表的元素是以分隔符为界限切分的字符串(不含分隔符)。如果分隔符前面(或与前一个分隔符之间)没有内容,则会返回一个空字符串元素。

注意: 在使用 split() 方法时,如果不指定 sep 参数,则不能同时指定 maxsplit 参数。

使用 split() 方法来分割字符串,返回一个字符串列表。

str = "Hello,World,Python"
parts = str.split(",")  
print(parts)   # 结果为 ['Hello', 'World', 'Python']

实例训练35 -输出被@的好友名称

str1 = '@马哥教育 @海瑞 @马斯克'
list1 = str1.split(' ')              #用空格分割字符串
print('您@的好友有: ')
for item in list1:print(item[1:])                 # 输出每个好友名时,去掉@符号

5、合并字符串:

合并字符串是将多个字符串通过一个固定的分隔符连接起来的过程。与拼接字符串不同,合并字符串会使用一个指定的分隔符来连接各个字符串。例如,如果我们有字符串列表 ['绮梦', '冷伊一', '香凝', '黛兰'],我们可以通过分隔符 "*" 将它们合并为一个字符串 "绮梦*冷伊一*香凝*黛兰"

合并字符串的操作可以通过字符串对象的 join() 方法来实现。该方法的语法格式如下:

strnew = string.join(iterable)

参数说明:

  • strnew:表示合并后生成的新字符串。

  • string:字符串类型,用于指定合并时的分隔符。

  • iterable:可迭代对象,该迭代对象中的所有元素(字符串表示)将被合并为一个新的字符串。string 作为边界点分割这些元素。

    使用 join() 方法来合并字符串列表或元组。

parts = ["Hello", "World", "Python"]
result = " ".join(parts)  
print(result)            # 结果为 Hello World Python

实例训练36 -通过好友列表生成全部被@的好友

list_friend = ['马哥教育','海瑞','马云','马斯克','俞洪敏']         # 好友列表
str_friend = ' @'.join(list_friend)                             # 用空格+@符号进行连接
at = '@'+str_friend                                             # 由于使用join()方法时,第一个元素前不加分隔符,所以需要在前面加上@符号
print('您要@的好友: ',at) 

6、检索字符串:

检索字符串是编程中用于查找和统计特定字符或子串在字符串中出现的次数、位置的方法。以下是几种常用的字符串检索方法:

① count()

count() 方法用于统计指定子串在字符串中出现的次数。如果子串不存在于字符串中,则返回0。

语法格式:

count = str.count(sub[, start[, end]])
  • str: 原始字符串。
  • sub: 需要统计的子串。
  • start: 可选参数,统计的起始位置,默认为字符串的开始。
  • end: 可选参数,统计的结束位置,默认为字符串的结束。

举例:

count() 方法用于统计指定子串在字符串中出现的次数:

text = "moonshot moonshot"
count_moonshot = text.count("moonshot")
print(count_moonshot)  # 输出: 2

② find()

find()方法用于查找子串在字符串中第一次出现的索引,如果未找到则返回-1。

语法格式:

position = str.find(sub[, start[, end]])
  • str: 原始字符串。
  • sub: 需要查找的子串。
  • start: 可选参数,查找的起始位置,默认为字符串的开始。
  • end: 可选参数,查找的结束位置,默认为字符串的结束。

举例

find() 方法用于查找子串在字符串中第一次出现的索引:

text = "hello world"
index = text.find("world")
print(index)  # 输出: 6

如果子串不存在,返回-1:

index = text.find("python")
print(index)  # 输出: -1

③ index()

index() 方法与find()类似,用于查找子串在字符串中第一次出现的索引。不同的是,如果子串未找到,index()会抛出一个异常。

语法格式:

position = str.index(sub[, start[, end]])
  • str: 原始字符串。
  • sub: 需要查找的子串。
  • start: 可选参数,查找的起始位置,默认为字符串的开始。
  • end: 可选参数,查找的结束位置,默认为字符串的结束。

举例:

index() 方法与find()类似,但若子串不存在则抛出异常:

text = "hello world"
index = text.index("world")
print(index)  # 输出: 6

如果子串不存在,会抛出ValueError:

# 这将抛出异常,因为"python"不在文本中
index = text.index("python")

④ startswith()

startswith() 方法用于检查字符串是否以指定的子串开始,如果是,则返回True,否则返回False。

语法格式:

bool = str.startswith(prefix[, start[, end]])
  • str: 原始字符串。
  • prefix: 需要检查的子串。
  • start: 可选参数,检查的起始位置,默认为字符串的开始。
  • end: 可选参数,检查的结束位置,默认为字符串的结束。

举例:

startswith() 方法用于检查字符串是否以指定的子串开始:

text = "hello world"
starts_with_hello = text.startswith("hello")
print(starts_with_hello)  # 输出: True

⑤ endswith()

endswith() 方法用于检查字符串是否以指定的子串结束,如果是,则返回True,否则返回False。

语法格式:

bool = str.endswith(suffix[, start[, end]])
  • str: 原始字符串。
  • suffix: 需要检查的子串。
  • start: 可选参数,检查的起始位置,默认为字符串的开始。
  • end: 可选参数,检查的结束位置,默认为字符串的结束。

举例

endswith() 方法用于检查字符串是否以指定的子串结束:

text = "hello world"
ends_with_world = text.endswith("world")
print(ends_with_world)  # 输出: True

这些方法为字符串的检索提供了灵活且强大的工具,使得在处理文本数据时更加高效和准确。通过这些方法,开发者可以轻松地实现对字符串内容的检索和统计,从而满足各种编程需求。

7、字母的大小写转换:

在编程中,经常需要对字符串中的字母进行大小写转换,以满足不同的格式要求或进行不区分大小写的比较。以下是两种常用的字符串大小写转换方法:

① lower()

lower() 方法用于将字符串中的所有大写字母转换为小写字母。

语法格式:

lower_str = str.lower()
  • str: 原始字符串。

举例:

text = "Hello World"
lower_text = text.lower()
print(lower_text)  # 输出: "hello world"

② upper()

upper() 方法用于将字符串中的所有小写字母转换为大写字母。

语法格式:

upper_str = str.upper()
  • str: 原始字符串。

举例:

text = "hello world"
upper_text = text.upper()
print(upper_text)  # 输出: "HELLO WORLD"

实例训练37 -不区分大小写验证会员名是否唯一

username_1 = '|MingRi|mr|mingrisoft|WGH|MRSoft|'          #假设已经注册的会员名称保存在一个字符串中,以“|”进行分隔
username_2 = username_1.lower()                           #将会员名称字符串全部转换为小写
regname_1 = input('输入要注册的会员名称:')
regname_2 = '|' + regname_1.lower() + '|'                  #将要注册的会员名称全部转换为小写
if regname_2 in username_2:                               #判断输入的会员名称是否存在print('会员名',regname_1,'已经存在! ')
else:print('会员名',regname_1,'可以注册! ')

这些方法使得在处理字符串时,可以轻松地进行大小写转换,以适应不同的应用场景,如用户输入的规范化、文件命名的统一等。通过这些简单的方法,可以提高代码的可读性和健壮性。

8、去除字符串中的空格和特殊字符:

在编程中,经常需要对字符串进行清理,去除不需要的空格或特殊字符。以下是几种常用的字符串清理方法:

① strip()

strip() 方法用于去除字符串两端的空格和特殊字符。默认情况下,它去除空白字符,包括空格、换行符(\n)、制表符(\t)等。也可以指定一个字符集合,去除两端的这些字符。

语法格式:

cleaned_str = str.strip([chars])
  • str: 原始字符串。
  • chars: 可选参数,指定要去除的字符集合。

举例:

text = "   Hello, World!   "
cleaned_text = text.strip()
print(cleaned_text)  # 输出: "Hello, World!"

② lstrip()

lstrip() 方法与strip()类似,但它只去除字符串左侧(开头)的空格和特殊字符。

语法格式:

cleaned_str = str.lstrip([chars])

举例:

text = "   Hello, World!   "
cleaned_text = text.lstrip()
print(cleaned_text)  # 输出: "Hello, World!   "

③ rstrip()

rstrip() 方法与strip()类似,但它只去除字符串右侧(结尾)的空格和特殊字符。

语法格式:

cleaned_str = str.rstrip([chars])

举例:

text = "   Hello, World!   "
cleaned_text = text.rstrip()
print(cleaned_text)  # 输出: "   Hello, World!"

这些方法使得在处理字符串时,可以轻松地去除两端的不必要字符,从而提高数据的清洁度和可用性。通过这些简单的方法,可以确保字符串数据在进一步处理或展示前达到预期的格式。

9、格式化字符串:

格式化字符串是编程中用于生成具有特定格式的字符串的方法。以下是两种常用的字符串格式化方法:

① %

% 操作符用于格式化字符串,它允许你在字符串中嵌入变量的值。

语法格式:

formatted_str = "%s%d%f" % (var1, var2, var3)
  • %s: 字符串格式化占位符。
  • %d: 整数格式化占位符。
  • %f: 浮点数格式化占位符。
  • var1, var2, var3: 要格式化的变量。

常用格式化字符表

格式化字符说明格式化字符说明
%s字符串(采用 str() 显示)%r字符串(采用 repr() 显示)
%c单个字符%o八进制整数
%d%i十进制整数%e指数(基底写为 e
%x十六进制整数%E指数(基底写为 E
%f%g浮点数%%字符 %

说明

  • m: 可选参数,表示占有宽度。用于指定输出的最小宽度。
  • .n: 可选参数,表示小数点后保留的位数。用于控制浮点数的精度。
  • 格式化字符用于指定类型,其值如表所示。

举例1

# 使用 %s 格式化字符串
name = "Alice"
print("Name: %s" % name)  # 输出: Name: Alice# 使用 %d 格式化十进制整数
age = 30
print("Age: %d" % age)  # 输出: Age: 30# 使用 %f 格式化浮点数
height = 165.5
print("Height: %.1f" % height)  # 输出: Height: 165.5# 使用 %x 格式化十六进制整数
number = 255
print("Number in hex: %x" % number)  # 输出: Number in hex: ff# 使用 %e 格式化指数
value = 123.456
print("Value in scientific notation: %e" % value)  # 输出: Value in scientific notation: 1.234560e+02# 使用 %% 转义字符 %
print("Percentage: %%" % 0)  # 输出: Percentage: %

举例2:

name = "Alice"
age = 30
height = 165.5
formatted_text = "Name: %s, Age: %d, Height: %.1f" % (name, age, height)
print(formatted_text)  # 输出: "Name: Alice, Age: 30, Height: 165.5"

这些格式化字符在Python中用于控制字符串的输出格式,使得在生成具有特定格式的字符串时更加灵活和精确。通过这些格式化字符,可以轻松地对数字、字符串等进行格式化,以满足各种编程需求。

② format()

format()方法提供了一种更现代的字符串格式化方式,它允许你使用大括号 {} 作为占位符,并可以指定变量的格式。

语法格式:

formatted_str = "{}{}{}".format(var1, var2, var3)
  • {}: 格式化占位符。
  • var1, var2, var3: 要格式化的变量。

format()方法常用格式化字符表

格式化字符说明格式化字符说明
s对字符串类型格式化b将十进制整数自动转换成二进制表示再格式化
d十进制整数o将十进制整数自动转换成八进制表示再格式化
c将十进制整数自动转换成对应的Unicode字符xX将十进制整数自动转换成十六进制表示再格式化
eE转换为科学计数法表示再格式化fF转换为浮点数(默认小数点后保留6位)再格式化
gG自动在 efEF 中切换%显示百分比(默认显示小数点后6位)

说明

  • #: 可选参数,对于二进制数、八进制数和十六进制数,如果加上 #,表示会显示 0b/0o/0x 前缀,否则不显示前缀。
  • width: 可选参数,用于指定所占宽度。
  • .precision: 可选参数,用于指定保留的小数位数。
  • type: 可选参数,用于指定类型。

举例:

name = "Bob"
age = 25
weight = 70.3
formatted_text = "Name: {0}, Age: {1}, Weight: {2:.1f}".format(name, age, weight)
print(formatted_text)  # 输出: "Name: Bob, Age: 25, Weight: 70.3"

使用变量位置:

name = "Bob"
age = 25
weight = 70.3
formatted_text = "Name: {1}, Age: {0}, Weight: {2:.1f}".format(age, name, weight)
print(formatted_text)  # 输出: "Name: Bob, Age: 25, Weight: 70.3"

使用关键字参数:

name = "Bob"
age = 25
weight = 70.3
formatted_text = "Name: {name}, Age: {age}, Weight: {weight:.1f}".format(name=name, age=age, weight=weight)
print(formatted_text)  # 输出: "Name: Bob, Age: 25, Weight: 70.3"

这些方法为字符串的格式化提供了灵活且强大的工具,使得在生成具有特定格式的字符串时更加高效和准确。通过这些方法,可以轻松地将变量嵌入到字符串中,满足各种编程需求。

以上是 Python 中处理字符串时最常用的一些操作。Python 的字符串是不可变的,这意味着一旦创建,就不能被改变。每次对字符串的操作都会生成一个新的字符串。

二、字符串编码转换

字符串编码转换是编程中用于将字符串转换为不同编码格式的字节序列,或将字节序列解码回字符串的方法。以下是两种常用的字符串编码转换方法:

1、 使用encode()方法编码

encode()方法用于将字符串编码为字节序列。默认情况下,它使用UTF-8编码,但可以指定其他编码格式。

语法格式:

byte_sequence = str.encode([encoding])
  • str: 原始字符串。
  • encoding: 可选参数,指定编码格式,默认为UTF-8。

举例:

text = "Hello, World!"
encoded_text = text.encode('utf-8')
print(encoded_text)  # 输出: b'Hello, World!'

2、使用decode()方法解码

decode() 方法用于将字节序列解码回字符串。它需要指定字节序列的编码格式。

语法格式:

str = byte_sequence.decode([encoding])
  • byte_sequence: 字节序列。
  • encoding: 指定字节序列的编码格式。

举例:

byte_sequence = b'\xe4\xbd\xa0\xe5\xa5\xbd'
decoded_text = byte_sequence.decode('utf-8')
print(decoded_text)  # 输出: "你好"

这些方法为字符串的编码和解码提供了灵活的工具,使得在处理不同编码格式的数据时更加高效和准确。通过这些方法,可以轻松地在字符串和字节序列之间进行转换,以满足各种编程需求。

相关文章:

Python字符串及正则表达式(十):字符串常用操作、字符串编码转换

前言:在编程的世界里,字符串无处不在。它们是构建用户界面、存储数据、进行通信的基础元素。无论是财务系统的总账报表、电子游戏的比赛结果,还是火车站的列车时刻表,这些信息最终都需要以文本的形式呈现给用户。这些文本的背后&a…...

测试工程师八股文04|计算机网络 和 其他

一、计算机网络 1、http和https的区别 HTTP和HTTPS是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。 ①http和https的主要区别在于安全性。http是一种明…...

Codeforces Global Round 27的C题

题目大意 给定一个n,n>5 ans0 ans&a1|a2&a3|a4&a5...an,数组a是一个排列 下标是奇数让ans对其进行&操作,否则进行|操作,求ans能达到的最大值. 分奇偶来讨论,在n为奇数的情况下,最后一次操作是|,在n为偶数的情况下,最后一次操作是&. n二进制最高位的计算…...

【Linux】Nginx一个域名https一个地址配置多个项目【项目实战】

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…...

第36次CCF计算机软件能力认证 梦境巡查

梦境巡查 刷新 时间限制: 1.0 秒 空间限制: 512 MiB 相关文件: 题目目录 题目背景 传说每当月光遍布西西艾弗岛,总有一道身影默默守护着居民们的美梦。 题目描述 梦境中的西西艾弗岛由 �1n1 个区域组成。梦境…...

[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)

AdaBoost AdaBoost(Adaptive Boosting)是一种Boosting算法,它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重,使那些被错误分类的样本在后续的训练中得到…...

传统零售商商业升级的核心动机及与互联网业务融合的探索——以 AI 智能名片 S2B2C 商城小程序源码为例

摘要:本文旨在探讨传统零售商尝试商业升级的核心动机,并以 AI 智能名片 S2B2C 商城小程序源码为典型案例,分析互联网业务模式如何助力传统零售商转型。通过剖析传统零售增长模式的局限以及互联网业务在增长速度、迭代试错和用户需求洞察方面的…...

飞牛 fnos docker镜像部署OpenSpeedtest宽带网速测试教程

penSpeedTest是一个跨平台的网络测速应用,支持不同操作系统的浏览器,无需安装额外软件或插件。您可以在iPhone、iPad、Android设备、Windows和Linux系统的电脑、手机和平板上直接测试设备与NAS之间的宽带速度。 通过这个可以排查出设备与NAS之间的传输速…...

【C++】list

OK&#xff0c;最近浅浅学习了STL的list&#xff0c;有兴趣不妨垂阅&#xff01; 目录 1.constructor 2.assign 3.insert 4.erase 5. reverse 6.swap 7.merge 8.unique 9.splice 10.小知识 同样的&#xff0c;使用list 需要包含一个头文件<list>。<list&g…...

keepalive的高可用集群

一、keepalived概述 1.keepalive的工作原理 keepalive是专门为了lvs集群开发出来的&#xff0c;但是适用场景不仅仅局限于lvs。而且keepalive为后台的真实服务器做了一个健康检查&#xff0c;当服务不可用时&#xff0c;会自动的移除ipvs的转发策略&#xff0c;服务恢复时&…...

HTTP 协议报文结构 | 返回状态码详解

注&#xff1a;本文为 “HTTP 历史 | 协议报文结构 | 返回状态码” 相关文章合辑。 未整理去重。 HTTP 历史 wangjunliang 最后更新: 2024/3/16 上午10:29 超文本传输协议(英语:HyperTextTransferProtocol,缩写:HTTP)是 万维网(World Wide Web)的基础协议&#xff61;自 蒂姆…...

如何保证开源AI呼入机器人和AI呼出机器人的服务质量?

如何保证开源AI呼入机器人和AI呼出机器人的服务质量&#xff1f; 确保开源AI呼入机器人和AI呼出机器人的服务质量是企业成功部署这些智能系统的关键。高质量的服务不仅能够提高客户满意度&#xff0c;还能增强企业的市场竞争力。以下是实现这一目标的几个关键策略和技术措施&a…...

C++day7

#include <iostream>using namespace std; template <class T> class mylist{ public:struct Link{T val;Link* next;Link* front;};//增void insert(T val);//删void remove(T val);//改mylist& operator[](int index);//排序void Sort();//遍历void show();/…...

docker搭建Redis集群及哨兵(windows10环境,OSS Cluster)

一、基本概念 Redis:即 "Remote DIctionary Server" &#xff0c;翻译为“远程字典服务器”。从字面意义上讲&#xff0c;它指的是一个远程的字典服务&#xff0c;意味着它是一个可以远程访问的服务&#xff0c;主要用于存储键值对&#xff08;key-value pairs&…...

第8章 搬移特性

8.1 搬移函数 模块化是优秀软件设计的核心所在&#xff0c;好的模块化能够让我在修改程序时只需理解程序的一小部分。为了设计出高度模块化的程序&#xff0c;我得保证互相关联的软件要素都能集中到一块&#xff0c;并确保块与块之间的联系易于查找、直观易懂。同时&#xff0c…...

[IT项目管理]项目时间管理(本章节3w字爆肝)

七.项目时间管理 7.1 项目进度的重要性 为什么要重视项目进度&#xff1a;在项目进行的过程之中会遇到变故。但是不论项目中发生了什么&#xff0c;时间总是在流逝&#xff0c;就可能会导致项目不可以在规定的时间完成。 7.2可能影响项目进度的因素 有员工离职个人的工作方…...

k8s中设置annotation的方法总结

k8s中设置annotation的方法总结 annotation是什么 在 Kubernetes 中&#xff0c;Annotations 是一种用于向 Kubernetes 对象附加非标识性元数据的机制。 annotation有什么用 annotation与 Labels 类似&#xff0c;但有一些关键区别和特定用途。 常用于存储与对象相关的配置…...

第19天:信息收集-Web应用源码获取闭源备份开发泄漏WebPack打包资源搜索ICO定位

#知识点 1、信息收集-Web应用-源码获取-已知指纹&未知指纹 2、信息收集-Web应用-源码获取-泄漏问题&发现指纹 一、参考文章&#xff1a; https://www.secpulse.com/archives/124398.html https://mp.weixin.qq.com/s/QgLDdaefXlZtvlSiFQShZw 二、源码泄漏原因&#xff…...

uniapp小程序的锚点定位(将页面滚动到目标位置)

小程序中&#xff0c;a页面跳转到b页面&#xff0c;跳转后滚动定位到b页面的特定位置。 1.uni.pageScrollTo传递一个scrollTop参数可以滚动到特定位置。2.可以通过 uni.createSelectorQuery()等获取定位元素的位置信息。3.uni.getSystemInfoSync()获取设备的导航栏和状态栏高度…...

py脚本部署到服务器定时启动

py脚本部署到服务器定时启动 一、准备好你的脚本二、把脚本放到服务器三、在服务器创建脚本所需要的环境1、安装 Miniconda&#xff08;如果不想安装 Anaconda 或 Miniconda&#xff0c;可以直接使用 Python 的venv模块创建虚拟环境&#xff0c;但安装 Conda 会更方便管理不同版…...

相机不动,机构动作----Hands Eyes

最近在研究 手眼标定&#xff0c;发现大家都需付费&#xff0c;搞啥子&#xff0c;说好的开源。。。 以相机在上固定不动&#xff0c;机械手为 EPSON_Robot 为例&#xff0c;详细的一步一步实例操作指引 EPSON_Robot 的192.168.0.1 2004 Server 详细操作步骤 1. 启动程序 运…...

Jdk1.7到Jdk1.8 HashMap 发生了什么变化(底层)

从JDK 1.7到JDK 1.8&#xff0c;HashMap在底层实现上发生了显著的变化&#xff0c; 主要体现在数据结构、链表插入方式、哈希算法、扩容机制以及并发性方面。 以下是具体的变化点&#xff1a; 1. 数据结构的变化 JDK 1.7&#xff1a;HashMap的底层数据结构是数组单向链表。…...

微积分复习笔记 Calculus Volume 2 - 4.2 Direction Fields and Numerical Methods

4.2 Direction Fields and Numerical Methods - Calculus Volume 2 | OpenStax...

java后端环境配置

因为现在升学了&#xff0c;以前本来想毕业干java的&#xff0c;很多java的环境配置早就忘掉了&#xff08;比如mysql maven jdk idea&#xff09;&#xff0c;想写个博客记录下来&#xff0c;以后方便自己快速搭建环境 JAVA后端开发配置 环境配置jdkideamavenMySQLnavicate17…...

Unity UI Button 事件优先级调整技术方案

Unity UI Button 事件优先级调整技术方案 在 Unity 项目开发过程中&#xff0c;针对 UI Button 的事件执行顺序控制是一个常见需求。本文详细阐述两种将新添加事件置于第一个执行位置的方法&#xff0c;旨在为开发者提供全面且专业的技术参考。 一、基于反射机制的事件插入方…...

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢&#xff1f;值类型引用类型 2、总结 三、特殊的引用类…...

PHP排序算法:数组内有A~E,A移到C或者C移到B后排序,还按原顺序排序,循环

效果 PHP代码 public function demo($params){function moveNext($arr){$length count($arr);$lastElement $arr[$length - 1];for ($i $length - 1; $i > 0; $i--) {$arr[$i] $arr[$i - 1];}$arr[0] $lastElement;return $arr;}function moveAndReplace($array, $from…...

keepalived的高可用集群

keepalived的概念 keepalived的工作原理 基于vrrp实现的调度器高可用方案 keepalived的配置实验 先在调度服务器上安装keepalived和ipvsadm apt -y install keepalived ipvsadm 复制keepalived的配置文件到/etc/keepalived/目录下 cp /usr/share/doc/keepalived/samples/keep…...

基于单片机的农田灌溉系统(论文+源码)

1.系统设计 本系统主要实现如下目标&#xff1a; 1&#xff0e;可以实时监测土壤湿度&#xff1b; 2&#xff0e;土壤湿度太低时&#xff0c;进行浇水操作&#xff1b; 3&#xff0e;可以按键设置湿度的触发阈值&#xff1b; 4. 可以实现远程操控 5&#xff0e;可以实现手…...

技术文档分享——绘制精准航海图:技术文档规划、表达与维护的艺术

绘制精准航海图&#xff1a;技术文档规划、表达与维护的艺术 方向一&#xff1a;技术文档的规划布局从技术文档的规划布局入手&#xff0c;探讨如何确定文档的整体架构&#xff0c;如章节设置、逻辑顺序等&#xff0c;以确保信息呈现的系统性与连贯性。1. 确定文档的目标和读者…...

43124123

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…...

Pytorch应用实战(1)- 基于YOLO的视频人脸马赛克处理

免费链接: Blogger(需翻Q), Github 文章目录 本文介绍给图片的人脸打码给视频的人脸打码本文介绍 YoloV11(Github)提供了非常方便的API帮助用户实现目标检测(detect)、语义分割(segement)、肢体识别(Pose)等功能。 本文将基于YoloV11的目标检测来实现一个视频人脸马…...

【Prompt Engineering】1.编写 Prompt 的原则

一、环境配置 使用 OpenAI 的 ChatGPT API&#xff0c;需要有 API_KEY&#xff0c;并安装 OpenAI 库。安装命令&#xff1a;pip install openai 和 pip install zhipuai。配置方法&#xff1a;直接设置 openai.api_key 或通过环境变量设置。 二、两个基本原则 2.1 原则一&am…...

非vip版opengl

环境搭建 安装编译器和构建工具&#xff1a;在 Windows 上可以使用 Visual Studio&#xff0c;在 Linux 上可以使用 GCC 等编译器。确保编译器已正确安装并配置好环境变量。安装 OpenGL 库和相关辅助库&#xff08;以 GLUT 为例&#xff09;&#xff1a; Windows&#xff1a; 下…...

【深入理解Nginx】

深入理解Nginx 介绍 Nginx&#xff08;发音为 “engine-x”&#xff09;是一款高性能的HTTP服务器和反向代理服务器&#xff0c;同时支持IMAP/POP3协议。它以其高并发处理能力、稳定性、丰富的功能集、简单的配置和低资源消耗而受到广泛欢迎。Nginx特别适合提供静态文件服务、…...

番外篇 | Hyper-YOLO:超图计算与YOLO架构相结合成为目标检测新的SOTA !

前言:Hello大家好,我是小哥谈。Hyper-YOLO,该方法融合了超图计算以捕捉视觉特征之间复杂的高阶关联。传统的YOLO模型虽然功能强大,但其颈部设计存在局限性,限制了跨层特征的融合以及高阶特征关系的利用。Hyper-YOLO在骨干和颈部的联合增强下,成为一个突破性的架构。在COC…...

Microi吾码|开源低代码.NET、VUE低代码项目,表单引擎介绍

Microi吾码&#xff5c;开源低代码.NET、VUE低代码项目&#xff0c;表单引擎介绍 一、摘要二、Microi吾码介绍2.1 功能介绍2.2 团队介绍2.3 上线项目案例 三、Microi吾码表单引擎是什么&#xff1f;四、Microi吾码表单引擎功能4.1 模块引擎 - 由表单引擎驱动4.2 流程引擎 - 由表…...

css常用属性有哪些

在上篇文章我们知道了利用css选择器来对HTML进行简单装饰&#xff0c;就像做word文档一样&#xff0c;需要对哪一段落修改格式&#xff0c;就需要先选中&#xff0c;css选择器就是这意思。这格式如何修改&#xff0c;怎么放大字体&#xff0c;怎么加粗&#xff0c;怎么修改背景…...

Java设计模式 —— 【结构型模式】装饰者模式详解

文章目录 前言结构说明案例演示小结静态代理和装饰者的区别 前言 在日常生活中&#xff0c;我们常会遇到一种场景&#xff1a;去快餐店吃饭&#xff0c;里面琳琅满目的主食&#xff0c;还有各式各样的配菜作为消费者&#xff0c;只管挑选就行&#xff0c;但是如果让我们来设计…...

简道云与金蝶云星空无缝集成的技术探索

简道云数据集成到金蝶云星空的技术案例分享 在企业信息化建设中&#xff0c;数据的高效流动和准确对接是关键环节。本文将聚焦于一个实际运行的系统对接集成案例&#xff1a;简道云-其他入库单--->金蝶-其他入库单&#xff0c;通过轻易云数据集成平台实现这一目标。 案例背…...

单片机原理及应用笔记:单片机中断系统原理与项目实践

高金鹏&#xff1a;男&#xff0c;银川科技学院计算机与人工智能学院&#xff0c;2022级别计算机科学与技术本科生&#xff0c;单片机原理及应用课程第六组。 指导教师&#xff1a;王兴泽 电子邮件&#xff1a;高金鹏3535558665qq.com 个人CSDN:暴躁的海绵宝宝 暴躁的海绵宝…...

uniapp使用百度地图配置了key,但是显示Map key not configured

搞了我两天的一个问题。 hbuilderx版本&#xff1a;4.36 问题介绍&#xff1a; 我的项目是公司的项目&#xff0c;需要在H5端使用百度地图&#xff0c;使用vue-cli创建的uniapp&#xff0c;就是uni代码在src里的目录结构。就是使用这种方式才会遇到这个问题。 问题原因&#xf…...

CTFHub ssrf

第一关&#xff08;内网访问&#xff09; 尝试访问位于127.0.0.1的flag.php吧 第二关(伪协议读取文件) 尝试去读取一下Web目录下的flag.php吧 1.首先尝试http://127.0.0.1/flag.php 2.查看页面源代码 3.根据提示输入file:///var/www/html/flag.php 4.查看页面源代码 第三关&…...

字符串哈希

1. LC 3292 形成目标字符串需要的最少字符串数Ⅱ 这题在3291的基础上开大数据量了。 3291我是比较标准的dp字典树优化匹配。先把所有word扔到字典树里面&#xff0c;定义dp[i]表示到target[i]需要的最少次数。对于每个i进行target子串的最长前缀匹配&#xff0c;随后向后刷表…...

ensp 静态路由配置

A公司有广州总部、重庆分部和深圳分部3个办公地点&#xff0c;各分部与总部之间使用路由器互联。广州、重庆、深圳的路由器分别为R1、R2、R3&#xff0c;为路由器配置静态路由&#xff0c;使所有计算机能够互相访问&#xff0c;实训拓扑图如图所示 绘制拓扑图 给pc机配置ip地址…...

Android Room 数据库使用详解

一、Room介绍 Android Room 是 Google 提供的一个 Android 数据持久化库&#xff0c;是 Android Jetpack 组成部分之一。它提供了一个抽象层&#xff0c;使得 SQLite 数据库的使用更为便捷。通过 Room&#xff0c;开发者可以轻松地操作数据库&#xff0c;不需要直接编写繁琐的…...

Ubuntu安装或卸载mariadb-server软件包

1、安装mariadb-server sudo apt install mariadb-server 检查MariaDB服务器的服务状态 service mariadb status 仅需要卸载MariaDB&#xff0c;而不是删除所有MariaDB相关软件包 sudo apt-get remove mariadb-server 2、卸载MariaDB 从系统中完全删除MariaDB数据库&#xf…...

canal详解及demo

提示&#xff1a;如何保证Redis中的数据与数据库中的数据一致性&#xff1f;数据同步canal的介绍和demo、大型企业如何实现mysql到redis的同步&#xff1f;使用binlog实时更新redis缓存、canal的接入教程、win下canal的服务器端、canal客户端的创建、连接、测试教程、数据同步方…...

SQL语句

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系数据库系统的标准编程语言。它允许用户执行数据的定义、查询、更新和管理等操作。以下是一些常见的SQL语句及其简要说明&#xff1a; 数据定义语言&#xff08;DDL&#…...

中间件 redis安装

redis官网地址&#xff1a;Redis - The Real-time Data Platform 环境 CentOS Linux release 7.9.2009 (Core) java version "17.0.12" 2024-07-16 LTS 1、通过压缩包安装redis 1&#xff0c;远程下载redis压缩包&#xff0c;或去官网下载&#xff1a;Downloads …...