Python基础-03字符串
3.字符型
字符型常见的方法如下所示:
- capitalize():字符串第一个英文单词首字母大写
- title():如字符串有多个英文单词,则每个单词首字母大写
- split():对字符串指定的分隔符进行拆分,默认为空格符
- find():返回匹配到的字符第一次出现的位置索引,找不到返回 -1
- replace(old, new):对字符串指定的字符进行替换
- strip():删除指定的字符
- len():获取字符串长度
- +:常用于字符拼接
- *:用于复制字符
- str():将其他类型数据转换为字符型
- upper():将字符转换为大写
- lower():将字符转换为小写
3.1 常用方法示例
a=" i love china "
print(f"字符串仅第一个单词首字母大写:{a.capitalize()}")
print(f"字符串仅每个单词首字母大写:{a.title()}")
print(f"对字符串进行拆分:{a.split()}")
print(f"对字符串进行查找:{a.find('i')}")
print(f"对字符串进行替换:{a.replace('i','H')}")
print(f"删除指定的字符:{a.strip('i')}")
print(f"获取字符串长度:{len(a)}")
print(f"字符串拼接:{a+' hello '}")
print(f"字符串复制:{a*3}")
print(f"将其他类型转换为字符:{str(123)},{type(str(123))}")
输出结果如下所示:
字符串仅第一个单词首字母大写: i love china
字符串仅每个单词首字母大写: I Love China
对字符串进行拆分:['i', 'love', 'china']
对字符串进行查找:1
对字符串进行替换: H love chHna
删除指定的字符: i love china
获取字符串长度:14
字符串拼接: i love china hello
字符串复制: i love china i love china i love china
将其他类型转换为字符:123,<class 'str'>
3.2 字符索引和切片
a=" i love china "
print(f"获取第3个字符:{a[3]}")
print(f"获取单词love:{a[3:8]}")
print(f"对字符串进行倒序输出:{a[::-1]}")
输出结果如下所示:
获取第3个字符:l
获取单词love:love
#### 对字符串进行倒序输出: anihc evol i
3.3 字符串其他方法
获取字符串其他的方法和使用方法,可以使用
dir(str)
或
help(str)
3.4 字符串格式化
字符中格式化主要指对输出的字符串进行统一归化处理。Python提供很多字符串格式化方式,常见分别是%-formating、str.format()、f-string、模板字符串。
f-string,如果要使用这种字符串格式化,Python版本必须大于3.6版本
3.4.1 %-formating
这是一种C风格的字符串格式化,有时也称为旧式字符串格式化,示例如下所示:
>>> name="Surpass"
>>> "Hello %s " % name
'Hello Surpass '
%s格式说明将被替换的字符为字符串的,在这种旧式风格方式中,还可以用于控制输出字符串的格式说明符,例如可以将数字转换为其他进制或填充空格生成特定格式的表格或报告,如下所示:
>>> name="Surpass"
>>> errorCode=123456
>>> "Hello %s ,there is a 0x%x error" % (name,errorCode)
'Hello Surpass ,there is a 0x1e240 error'
3.4.2 str.format()
在Python3引入的一种新的字符串格式化方式。这种方法可以免去%操作这种特殊语法,使得字符格式化的语法更加规整,需要在字符串对象上调用format()函数。示例如下所示:
>>> name="Surpass"
>>> "Hello {}".format(name)
'Hello Surpass'
另外一种表现形式如下所示:
>>> name="Surpass"
>>> errorCode=123456
>>> "Hello {name} ,there is a 0x%{errorCode:x}".format(name=name,errorCode=errorCode)
'Hello Surpass ,there is a 0x%1e240'
3.4.3 f-string
str.format()这种字符串格式化非常强大,也没有额外增加复杂性。但在Python 3.6 之后增加另外一个字符串格式方法,称f-string(formatted string literal)。使用这种方法,可以在字符串常量内使用嵌入的Python表达式,这也是我个人的最爱,后面使用这种方式格式化字符串非常多,示例如下所示:
>>> name="Surpass"
>>> errorCode=123456
>>> f"Hello {name} ,there is a {errorCode:#x}"
'Hello Surpass ,there is a 0x1e240'
>>> f"test add {sum((1,2,3,4,5))} bool test {True if 2>3 else False}"
'test add 15 bool test False'
3.4.4 模板字符串
Python中的另一种字符串格式化是模板字符串(template string)。这种机制相对简单,但也不太强大,可能会在某些情况中使用。示例如下所示:
from string import Template
>>> name="surpass"
>>> t=Template("Hello,$name")
>>> t.substitute(name=name)
'Hello,surpass'
模板字符串不能使用格式说明符。因此,为了让前面的错误提示代码正常,需要手动将int转换为十六进制,示例如下所示:
from string import Template
>>> name="Surpass"
>>> erroeCode=123456
>>> tempateString="Hello $name ,there is a $errorCode"
>>> Template(tempateString).substitute(name=name,errorCode=hex(errorCode))
'Hello Surpass ,there is a 0x1e240'
模板字符串通常用于处理用户输入生成的格式字符串,使用这种方式比较安全。
3.4.5 字符串格式如何选择
Python提供这么多的字符串格式方法,该如何选择了?可以遵循以下原则
如果字符串由用户提供,使用模板字符串来避免安全问题。如果不是,再考虑版本,Python 3.6 + 则使用f-string,否则使用str.format()
3.5 引号区别
在Python,字符串可以使用单引号、双引号和三引号表示,那这三者有什么区别?从字面的意思来看,三者没有任何区别,主要在是使用场景不一样。
-
单引号、双引号:两者没什么区别,不像其他语言如Java/C#、单引号表示字符型,双引号表示字符串,在Python全部按字符串处理
-
三引号一般书写形式为"""""",主要针对字符串非常长的情况,它允许字符串跨越多行,字符串也可以包含换行符、制表符及其他特殊字符等等。
-
需要特别注意是,三种引号不能嵌套自身,如果要进行嵌套需要进行转义,如下所示:
a="a \"" # 正确
a="a "" # 报错
File "<ipython-input-1-8b21a118cfbc>", line 1
a="a ""