String类型
@字符串是以”(单引号) 或 “”(双引号) 括起来的任意文本,比如’dfd’ “dsfdsf”
- ”(单引号)或 “” (双引号)本身只是一种表示方式,不是字符串的一部分
- 如果’本身想表达是’这个字符,需要用双引号引起来
- 字符串是不可变的
- pyhton 中没有字符的概念,只要用引号引起来的都是字符串
一、字符串的创建
str1 = 'hello'
str2 = "Hello"
print(str1)
print(type(str1))
print(str2)
print(type(str2))
二、字符串的运算
# 1、字符串的拼接:将两个字符串连接在一起 +
print(1 + 2) # 数学上的加法
str1 = "hello"
str2 = "你好"
str3 = str1 + str2
print(str3)
# 2、输出重复字符串 *
print(str1 * 3)
# 3、通过索引获取字符串中的字符,索引从0开始;访问字符串中的某个字符
# 语法格式:str[index]
str4 = "世界和平 北京你好"
print(str4[0])
# print(str4[9]) # IndexError: string index out of range
# 如果下标越界会报索引错误
# 4、字符串是不可变的,如果改变某个下标对应的字符会报错
str5 = "hello"
# str5[1] = "a" #TypeError: 'str' object does not support item assignment
print(str5)
# 5、截取字符串的一部分
str6 = "世界和平 北京你好"
# 从给定下标开始截取到给定下标之前
# 语法格式 : str[start,end] 不包含结束下标
str7 = str6[1:6]
print(str7)
# 从头开始截取到给定下标之前
str8 = str6[:6]
print(str8)
# 从开始下标截取到字符串末尾
str9 = str6[6:]
print(str9)
# 6、判断字符串中是否包含给定的字符
str10 = "世界和平 北京你好"
print("北京" in str10)
print("北京" not in str10)
# 7、格式化字符串
# %s 格式化字符串
# %d 格式化整数
# %f 格式化浮点数 浮点数精度确定:%6.2f 表示包含小数点一共六位,2表示小数点后共两位
# %e或%E 科学计数法
# %o 八进制
# %x 十六进制
# 语法格式: 字符串(字符串占位) % () 一一对应
name = 'lily'
age = 18
weight = 51.2
print("姓名是%s,年龄是%d,体重是%fkg" % (name,age,weight))
print("姓名是%s" % name)
print("%.2f" % 2.33333 + "%") #2.33%
# 当字符串中有格式化出现时,两个%%表示一个
print("%.2f%%" % 2.33333) #2.33%
# 8、 转义字符 \
# 有实际意义:将某些本身没有意义的字符转成有实际意义的字符,\本身有实际意义
# \n 换行
str11 = "hello\nworld"
print(str11)
# \' ----> '
# \" ----> "
# \\ ----> \
print("\'")
# \t 横向制表 table
# \r 回车 return
# \b 退格 backspace
# 输出\n
print("\\n")
# 保留原始字符不转义
# r R 原始字符串:所有字符串直接按照字符串意思展示,没有转义
print(r"\n")
三、字符串内嵌函数
# 1、eval(str) : 将str当成有效的表达式来计算并返回结果,结果为数值类型
num = eval("123")
print(num) # 123
print(type(num)) # <class 'int'>
print(eval("+123")) # 123
print(eval("-123")) # -123
print(eval("12 - 3")) # 9
# print(eval("a123")) # SyntaxError: invalid syntax
# 2、len(str) 返回字符串长度,字符串的字符个数
# lower() 将字符串中的所有大写字母转为小写
# upper() 将字符串中的所有小写字母转为大写
# swapcase() 将字符窜的字母所有小写转为大写,大写转为小写
# capitalize() 将字符串的第一个字符转为大写,其余是小写
# title() 返回标题化字符串:就是将字符串所有单词第一个字母大写
str1 = "hello Is niHao"
print(len(str1)) # 14
print(str1.lower()) # hello is nihao
print(str1.upper()) # HELLO IS NIHAO
print(str1.swapcase()) # HELLO iS NIhAO
print(str1.capitalize()) # Hello is nihao
print(str1.title()) # Hello Is Nihao
# 3、str.center(width, fillchar)
# 返回一个指定宽度width的居中的字符串,str这个字符串居中,其他位置用fillchar补全,默认为空格
str2 = "pycMM"
print(str2.center(15,"*")) # *****pycMM*****
# 左对齐 ljust(width,fillchar) 返回一个指定宽度width的居中的字符串,str这个字符串左对齐,其他位置用fillchar补全,默认为空格
# 右对齐 rjust(width,fillchar) 返回一个指定宽度width的居中的字符串,str这个字符串右对齐,其他位置用fillchar补全,默认为空格
print(str2.ljust(15,"*")) # pycMM**********
# zfill(width) 返回一个指定宽度width的字符串,原始字符串右对齐,其他位置填充0
print(str2.zfill(12)) # 0000000pycMM
# str.count(str,begin,end): 返回string里面出现str的次数,如果begin end有值,就返回
str3 = 'good very good very good very'
print(str3.count("very")) # 3
print(str3.count("good",5,21)) # 1
# 4、str.find(str,begin,end) 检测string里面有没有str字符串,如果找到返回第一次出现的下标,否则返回-1
# string.rfind() 效果与find()一样,只不过从字符串右边开始查找
# str.index() 检测string里面有没有str字符串,如果找到返回第一次出现的下标,否则会出现一个错误
# str.rindex() 效果与index() 一样,只不过从右边开始查找
print(str3.find("very")) # 5
print(str3.find("very",6,20)) # 15
print(str3.find("weew")) # -1
print(str3.index("very")) # 5
#print(str3.index("2323")) 会出现一个错误
print(str3.rfind("very")) # 要完整的查找完这个单词才会读出下标 25
print(str3.rindex("very")) # 25
# 5、lstrip("") 截掉字符串左边的指定字符,默认为空格
# rstrip() 截掉字符串右边的指定字符,默认为空格
# strip() 在字符串上执行lstrip 与 rstrip 两个操作
str4 = " MM是 lily "
str5 = "&&&&&&&&&&是Luck&&&&&&&&&&"
print(str4) # MM是 lily
print(str4.lstrip()) # MM是 lily
print(str5) # &&&&&&&&&&是Luck&&&&&&&&&&
print(str5.lstrip('&')) # 是Luck&&&&&&&&&&
# 6、将字符串转为ASCII码 A--->65 a---> 97
# ord()
# 将数字转为字符
# chr()
print(ord("人")) # 20154
# print(chr("20154"))
# 7、切割字符串
# string.split(str,num) 以str切割string这个字符串,返回一个列表数据,如果num有值,那么是以str切割num次
str6 = "mm*142*regtr"
print(str6.split("*")) # ['mm', '142', 'regtr']
print(str6.split("*",1)) # ['mm', '142*regtr']
# string.splitlines(keepends) 按照行切割(\n \r \n\r),返回一个以行为单位的元素列表
# keepends 如果设置为True保留换行符号,如果设置为False不保留换行符号,默认False
str7 = "mm\n142\nregtr"
str8 = """
mm
142
regtr
"""
print(str7.splitlines()) # ['mm', '142', 'regtr']
print(str8.splitlines()) # ['', 'mm', '142', 'regtr']
# 8、string.join(sep) 以指定的string作为分隔符,将sep里面的元素连接起来
str8 = "*"
list1 = ["hello","nice","good"]
print(str8.join(list1)) # hello*nice*good
# 9、max()返回字符串里面最大字母
# min()返回字符串里面最小字母
# 10、替换,表示
# string.replace(old,new,max) 将string里面的old字符串换成new字符串,如果max有值,最多转换max次
str = "good nice good nice"
print(str.replace("nice","handsome",1)) # good handsome good nice
# maketrans() 创建字符映射转换表,对于接收两个参数的最简单的调用方法,
# 第一个参数是字符串,表示的是需要转换的字符;第二个参数也是字符串,表示的是转换的目标
t = str.maketrans("abc","123")
# 如果只有一个参数,必须是字典类型
t1 = str.maketrans({"a":"1","c":"6"})
# string.translate(table) 根据str给出的表转换string的字符
str11 = "haha nishizuimeibecccccc"
print(str11.translate(t)) # h1h1 nishizuimei2e333333
print(str11.translate(t1)) # h1h1 nishizuimeibe666666
四、用于判断的函数
'''
isalpha() 如果字符串至少有一个字符,并且所有字符都是字母则返回Ture,否则为False
isalnum() 如果字符串至少有一个字符,并且所有字符都是字母或数字则返回Ture,否则为False
isupper() 如果字符串中至少有一个字符,并且所有的字符都是大写返回Ture,否则为False
islower() 如果字符串中至少有一个字符,并且所有的字符都是小写返回Ture,否则为False
istitle() 如果字符串中所有字符标题化返回Ture,否则为False
isdigit() 如果字符串中至少有一个字符,并且所有的字符都是数字返回Ture,否则为False
isnumeric() 如果字符串中至少有一个字符,并且所有的字符都是数字字符返回Ture,否则为False
isspace() 如果字符串中只有空格字符返回Ture,否则False
'''
# starstwith(str[,begin,end]) 检查字符串是否以str开头,是返回Ture,否则返回False
# 如果指定begin 和 end ,则在指定范围内查找
str1 = "http://www.baidu.com"
print(str1.startswith("ht")) # True
print(str1.startswith("www")) # False
print(str1.startswith("www",7,15)) # True
# endswith(str[,begin,end]) 检查字符串是否以str结尾,是返回Ture,否则返回False
# 如果指定begin 和 end ,则在指定范围内查找
# encode(encoding) 以encoding指定的编码格式编码字符串
str2 = "qew是个好人"
print(str2) # qew是个好人
print(str2.encode("utf-8")) # b'qew\xe6\x98\xaf\xe4\xb8\xaa\xe5\xa5\xbd\xe4\xba\xba'
print(str2.encode("GBK")) # b'qew\xca\xc7\xb8\xf6\xba\xc3\xc8\xcb'
#decode(encoding) 以encoding指定的编码格式解码字符串
utfStr = str2.encode("utf-8")
print(utfStr.decode("utf-8")) # qew是个好人
gbkStr = str2.encode("GBK")
print(gbkStr.decode("GBK")) # qew是个好人