Python测开28期 - 旎奥 - 学习笔记 - python基础 - 数据类型:字符串

一、python的基本数据类型

类型 type 例子
整数 int -10
长整型 long 10000000000L
浮点数 float 2.05
字符串 string I love python
列表 list [“python”,“java”,9.7]
元组 tuple (“python”,“java”,9.7)
字典 dictionary {“name”:“emily”,“company”:“whatever”,“grade”:“17”}
集合 set {1,2,3}
布尔型 bool true,false
echo 'print(3*7)' | python
# 输出21,使用python语法计算
echo 3*7
# 输出3*7,输入什么就输出什么

1、字符串

  • 字符串:可以通过使用单引号双引号三引号 来定义,用于表示文本信息
    • ‘’ “” ‘’’ ‘’’ 定义字符串
    • json:什么是json
      • json.loads() json字符串-转化-字典
      • json.dumps() 字典转化成json
# 单行
str_a = "a"
str_c = 'c'
# 多行
str_b = """
这是一段多行字符串
"""

输出结果

2、 转义字符

转义字符在字符串中用于表示一些特殊字符或序列,以及插入难以直接输入的字符。

常见的转义字符包括:\n 表示换行符,\t 表示制表符,\" 表示双引号,\' 表示单引号,\\ 表示反斜杠。

通过使用转义字符,可以在字符串中插入特殊字符或表示这些无法直接输入的内容。

message = "Hello\nWorld!"
print(message)

输出结果

3、字符串下标

下标是指从 0 开始的数字编号,也称为索引。

在字符串中,每一个字符都会对应一个下标,通过下标可以获取字符串中该下标对应的字符

语法格式:字符串对象[下标]

s = "hello"
print(s[0])
print(s[3])
print(s[5]) # 该行代码会报错

4、字符串处理

(1)统计查找替换类

  • len() 用来获取参数字符串的字符个数,该函数并不是字符串类型特有的,而是一个通用函数 格式:len(obj)
str =len( 'python 还好')
print(str)

输出结果

  • count() 返回 strstring 里面出现的次数,如果 start 或者 end 指定则返回指定范围内 str 出现的次数 格式:count(str, start, end)
s = "hello world hello Python"
n = s.count("o")
print(n)
n = s.count("O")
print(n)
n = s.count("or")
print(n)
n = s.count("o",10,30)
print(n)

输出结果

  • index() 检测 sub 是否包含在 string 中,如果 startend 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则抛出一个异常 格式:index(sub, start, end)
s = "Hello"
print(s.index("l"))
print(s.index("l",0,3)) # 区间使用下标位置,左闭右开区间
print(s.index("k"))

  • rindex() 作用同 index(),查找子串时从右侧查找,若找不到会抛出一个异常 格式:rindex(sub, start, end)
s = "Hello"
print(s.rindex("l"))
print(s.rindex("l",0,3))
print(s.rindex("k"))

  • find() 检测 sub 是否包含在 string 中,如果 startend 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 格式:find(sub, start, end)
s = "Hello"
print(s.find("l"))
print(s.find("l",0,3))
print(s.find("k"))
  • rfind() 作用同 find(),查找子串时从右侧查找,若找不到会抛出一个异常 格式:rfind(sub, start, end)
s = "Hello"
print(s.rfind("l"))
print(s.rfind("l",0,3))
print(s.rfind("k"))

输出结果

  • replace() 把 string 中的 old 替换成 new,如果 max 指定,则替换不超过 max 次. 格式:replace(old, new, max)
"""字符串常用API之replace"""
# replace:将目标的字符串替换为想要的字符串
d = "my name is yuanweiji"
print(d.replace("yuanweiji", "zhizhi"))

输出结果

(2)字符串判断类

  • startwith() 检查字符串是否是以 prefix 开头,是则返回 True,否则返回 False。如果 start 和 end 指定值,则在指定范围内检查. 格式:startwith(prefix, start, end)
url = "https://www.ceshiren.com"
print(url.startswith("https://"))
print(url.startswith("https://", 0, 3))
print(url.startswith("https://", 5, 30))

输出结果

  • endswith() 检查字符串是否是以 suffix 开头,是则返回 True,否则返回 False。如果 start 和 end 指定值,则在指定范围内检查. 格式:endwith(suffix, start, end)
url = "https://www.ceshiren.com"
print(url.endswith(".com"))
print(url.endswith(".com", 0, 20))
print(url.endswith(".com", 5, 30))

输出结果

  • isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False 格式:isalpha()
print("abc".isalpha())
print("ABC".isalpha())
print("ABCabc".isalpha())
print("123".isalpha())
print("a b".isalpha())
print("abc123".isalpha())
print("123abc".isalpha())
print("a@".isalpha())
print("".isalpha())

输出结果

  • isdigit() 如果 string 只包含数字则返回 True 否则返回 False. 格式:isdigit()
print("123".isdigit())
print("123abc".isdigit())
print("abc123".isdigit())
print("".isdigit())

输出结果

  • isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False 格式:isalnum()
print("abc".isalnum())
print("ABC".isalnum())
print("ABCabc".isalnum())
print("123".isalnum())
print("abc123".isalnum())
print("123abc".isalnum())
print("a b".isalnum())
print("a@".isalnum())
print("".isalnum())

输出结果

  • isspace() 如果 string 中只包含空格,则返回 True,否则返回 False. 格式:isspace()
print(" ".isspace())
print("    ".isspace()) # tab键,由4个空白组成
print("\t".isspace())
print("\n".isspace())
print("\r".isspace())
print("".isspace())
print(" a".isspace())
print("1 ".isspace())

输出结果

  • isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False 格式:isupper()
print("ABC".isupper())
print("ABC123".isupper())
print("123ABC".isupper())
print("A!@#B".isupper())
print("abc".isupper())
print("abC".isupper())
print("abc123".isupper())
print("Abc!@#".isupper())
print("123".isupper())
print("".isupper())
print(" ".isupper())

输出结果

  • islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False 格式:islower()
print("abc".islower())
print("abc123".islower())
print("ABC".islower())
print("abC".islower())
print("Abc!@#".islower())
print("123".islower())
print("".islower())
print(" ".islower())

输出结果

  • istitle() 如果 string 是标题化的(所有单词首字符是大写)则返回 True,否则返回 False 格式:istitle()
print("Username".istitle())
print("User Name".istitle())
print("User_Name".istitle())
print("User.Name".istitle())
print("User+Name".istitle())
print("username".istitle())
print("UserName".istitle())
print("user name".istitle())
print("User name".istitle())

输出结果

(3)字符串转换类

  • capitalize() 把字符串的第一个字符大写 格式:capitalize()
print("username".capitalize())
print("Username".capitalize())
print("userNAME".capitalize())
print("this is username".capitalize())

输出结果

  • title() 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写 格式:title()
print("this is username".title())
print("THIS IS USERNAME".title())
print("tHIS IS username".title())

输出结果

  • upper() 转换 string 中的小写字母为大写 格式:upper()
print("abc".upper())
print("ABC".upper())
print("abCd".upper())
print("abc123".upper())
print("abc123ABC".upper())

输出结果

  • lower() 转换 string 中的小写字母为小写 格式:lower()
print("abc".lower())
print("ABC".lower())
print("abCd".lower())
print("abc123".lower())
print("abc123ABC".lower())

输出结果

(4)字符串对齐类

  • center() 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串,如果指定fillchar参数,则使用指定字符填充,fillchar参数长度只能为1 格式:center(width, fillchar)
print("|"+"hogworts".center(20) + "|")
print("|"+"hogworts".center(5) + "|")
print("|"+"hogworts".center(20, "-") + "|")

输出结果

  • ljust() 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串,如果指定fillchar参数,则使用指定字符填充,fillchar参数长度只能为1 格式:ljust(width, fillchar)
print("|"+"hogworts".ljust(20) + "|")
print("|"+"hogworts".ljust(5) + "|")
print("|"+"hogworts".ljust(20, "-") + "|")

输出结果

  • rjust() 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串,如果指定fillchar参数,则使用指定字符填充,fillchar参数长度只能为1 格式:ljust(width, fillchar)
print("|"+"hogworts".rjust(20) + "|")
print("|"+"hogworts".rjust(5) + "|")
print("|"+"hogworts".rjust(20, "-") + "|")

(5)字符串去除空白类

  • strip() 删除 string 左右两侧的空白字符, 如果指定chars参数,则删除左右两侧指定的字符 格式:strip(chars)
print("|" + "  hogworts  " + "|")
print("|" + "  hogworts  ".strip() + "|")
print("|" + "  hogworts".strip() + "|")
print("|" + "hogworts  ".strip() + "|")
print("|" + "  h o g w o r t s  ".strip() + "|")
print("|" + "bachogwortsabc".strip("cba") + "|")

  • lstrip() 删除 string 左边的空白字符, 如果指定chars参数,则删除左两侧指定的字符 格式:lstrip(chars)
print("|" + "  hogworts  " + "|")
print("|" + "  hogworts  ".lstrip() + "|")
print("|" + "  hogworts".lstrip() + "|")
print("|" + "hogworts  ".lstrip() + "|")
print("|" + "  h o g w o r t s  ".lstrip() + "|")
print("|" + "bachogwortsabc".lstrip("cba") + "|")

  • rstrip() 删除 string 左边的空白字符, 如果指定chars参数,则删除右两侧指定的字符 格式:lstrip(chars)
print("|" + "  hogworts  " + "|")
print("|" + "  hogworts  ".rstrip() + "|")
print("|" + "  hogworts".rstrip() + "|")
print("|" + "hogworts  ".rstrip() + "|")
print("|" + "  h o g w o r t s  ".rstrip() + "|")
print("|" + "bachogwortsabc".rstrip("cba") + "|")

(6)字符串分割类

  • split() 以 sep 为分隔符分割 string,如果指定 maxsplit 参数,则仅分割 maxsplit次 格式:split(sep, maxsplit)
  • split:数据切分操作
  • 根据split内的字符串进行切分,将字符串根据规定的内容进行切分。以什么内容进行切分,那么这个内容也会没有
print("a-b-c-d".split("-"))
print("a-b-c-d".split("-", 2))
print("a--b-c-d".split("-"))
print("a-+b-c-d".split("-+"))
print("a b\tc\nd\re".split())
print("a b c d e".split(" ", 3))

输出结果

b = "a|p|p|l|e"
print(b.split("|"))
c = "i am stupid"
print(c.split(" "))

输出结果

  • splitlines() 使用换行符\n分割 string,如果指定 keepends 参数,则结果中会保留\n符号 格式:splitlines(keepends)
print("a\nb\nc".splitlines())
print("a\nb\nc".splitlines(True))

输出结果

  • partition() 从 sep 出现的第一个位置起,把 string 分成一个3元素的元组 (string_pre_sep,sep,string_post_sep),如果 string 中不包含 sep 则 string_pre_str == string,其余元素为空字符串 格式:parttion(sep)
print("This is Hogworts".partition("is"))
print("This is Hogworts".partition("iss"))

输出结果

  • rpartition() 从右向左 sep 出现的第一个位置起,把 string 分成一个3元素的元组 (string_pre_sep,sep,string_post_sep),如果 string 中不包含 sep 则 string_post_str == string,其余元素为空字符串 格式:rparttion(sep)
print("This is Hogworts".rpartition("is"))
print("This is Hogworts".rpartition("iss"))

输出结果

(7)字符串连接类

  • +号 将两个字符串连接生成一个新字符串, + 号两侧必须都是字符串 格式:str1 + str2
print("Hello" + "World")
print("Hello" + "123")
print("Hello" + 123)
  • *号 将字符串重复N次后生成一个新字符串 格式:str * n
print("*"* 10)
print("hello"* 10)
  • join() 使用 string 连接可迭代对象中的所有元素,可迭代对象参数中的所有元素必须是字符串 格式:join(iterable)
print("".join(("a","b","c")))
print("-".join(("a","b","c")))
print("->".join(("a","b","c")))
print("->".join(["a","b","c"]))
print("->".join({"a","b","c"}))
print("->".join({"a":"A","b":"B","c":"C"}))

输出结果

"""字符串常用API之join"""
# join:列表,根据想要的格式拼接成字符串
a = ["a", 'p', 'p', 'l', 'e']
print("|".join(a))

(8)编码解码类

  • encode() 使用 encoding 指定的字符集,对 string 进行编码,转换成二进制字符串 格式:encode(encoding)
print("abc123".encode("gbk"))
print("你好".encode("gbk"))

print("abc123".encode("utf-8"))
print("你好".encode("u8"))

输出结果

  • decode() 使用 encoding 指定的字符集,对 string 进行解码,转换成字符串对象, string必须是二进制字符串 格式:decode(encoding)
s1 = b'\xc4\xe3\xba\xc3'
s2 = b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(s1.decode("gbk"))
print(s2.decode("utf-8"))

# print(s1.decode("u8"))
# print(s2.decode("gbk"))

输出结果

(8)切片操作

对字符串按指定的范围进行截取,得到一个子字符串,指定范围时,起始下标必须小于结束下标,且子字符串不包含结束下标

格式:str[start: end: step]

python
s = "abcdefg"

# 普通切片
print(s[0: 2])
# 省略范围
print(s[0:])
print(s[: 2])
print(s[:])
# 指定步长
print(s[::1])
print(s[::2])
# 负下标
print(s[-3: -1])
# 负步长
print(s[-1: -3: -1])
# 逆序
print(s[::-1])

输出结果

str = 'python 还好'

print(str[0:-1])   # 输出第一个到倒数一个的所有字符串(-1代表最后一个,左闭右开),不包括最后一个
print(str[0])  # 输出第一个字符串
print(str[2:5])  # 输出低三个到第五个字符
print(str[2:])    # 输出第三个开始后的所有字符

输出结果

str = 'python 还好'
print(str.count("l"))   # 返回l的个数
print(str.find("o"))    # 返回o的索引
print(str.capitalize())  # 首字母变大写
print(str.encode("gb2312"))   # 转码
print(str.find("n"))        # 返回n的索引
print(str)    # 输出字符串
print(str[0:-1])   # 输出第一个到倒数一个的所有字符串(-1代表最后一个,左闭右开),不包括最后一个
print(str[0])  # 输出第一个字符串
print(str[2:5])  # 输出低三个到第五个字符
print(str[2:])    # 输出第三个开始后的所有字符
print(str * 2)   # 输出字符串2次
print(str + 'TEST')   # 连接字符串
print(len(str))
print(str.startswith("python"))   # 是不是以python开头,返回布尔值
b = '20'
print(b.isdecimal())   # 是否是数字
print(str.upper())    # 大写
print(str.title())      # title
str0 = 'python 呵呵'
print(str0.replace(str0[0:6], 'java'.upper()))  # 将python换成大写的java
print(str*4)

s1 = '_'
s2 = ""
seq = ("l", "i", "n", "d", "a")   # 字符串序列
print(s1.join(seq))
print(s2.join(seq))
str4 = "编号 标题 测试数据 测试结果"
(no, title, test_data, test_result) = str4.split(" ")
print(test_data)

# 格式输出
print('Hi, %s, you have $%d.' % ('linda', 10000))

print('Hello,{0},成绩提升了 {1:.1f}%'.format('小明', 17.125))   # 保留小数点后一位
print("{} {}".format("hello", "world"))  # 不设置指定位置,按默认是顺序

输出结果

5、字符串格式化

字符串格式化是一种将变量或值插入到字符串中的过程,以创建具有动态内容的字符串。

在Python中,可以使用format()方法和f-string(格式化字符串字面值)来进行字符串格式化。

(1)format()方法

format()方法是一种传统的字符串格式化方法。它使用占位符 {} 来表示要插入的变量或值,并通过传递参数来替换这些占位符。

"""字符串之字面量插值"""
# format的使用
# 第一个参数放在0的位置,第二个参数放在1的位置
demo = "i am a {1} {0}"
demo2 = "i am {school}"
demo_res = demo.format("zhizhi2", "zhizhi")
demo_res2 = demo2.format(school="灿灿")
# demo是原始的变量内容
print(demo)
# demo_res是替换过去的变量内容
print(demo_res)
print(demo_res2)

(2)f-string字符串

name = "zhizhi"
school = "ruozhidaxue"
print(f"my name is {name},my school is {school}")

表达式和函数调用

在f-string中,可以使用表达式和函数调用来生成动态的字符串内容。

name = "Alice"
age = 25
greeting = f"{'Hello' if age < 30 else 'Hi'} {name.upper()}"
print(greeting)
# 输出:HELLO ALICE