Python 1-09 字符串
一、Python 字符串
在 Python 3 中,字符串是由 Unicode 码点组成的不可变序列。
x = "Python"
y = x + "Cat"
x is y # False
字符串是用单引号"或双引号""括起来的一串字符,使用三引号创建多行字符串。
在 Python 中单字符也是用字符串表示。
>>> var1 = 'Hello World!'
>>> var2 = "Jack"
>>> var3 = "" # 空字符串
>>> var4 = "it's apple" # 双引号中可以嵌套单引号
>>> var5 = 'This is "PLANE"!' # 单引号中可以嵌套双引号
>>> var6 = 'what is 'your'name'
SyntaxError: invalid syntax
但是单引号嵌套单引号或者双引号嵌套双引号就会出现歧义。
二、Python 字符串运算符
假设: a = “Hello”,b = “Python”:
+ 字符串连接 a + b ‘HelloPython’
* 重复输出字符串 a * 2 ‘HelloHello’
[] 通过索引获取字符串中字符 a[1] ‘e’
[:] 截取字符串中的一部分 a[1:4] ‘ell’
in 成员运算符 “H” in a True
not in 成员运算符 “M” not in a True
r/R 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。
% 格式字符串
# path = 'D:\Python38\Scripts'
# path = r'D:\Python38\Scripts'
path = 'D:\Python38\Scripts\n abc'
leng = len(path)
# 通过索引获取元素
leng = len(path)
for i in range(leng):
print(path[i],end=',' if i<leng-1 else '.\n') # a>b ? x:y
print('abc')
# 通过enumerate()获取索引和元素
for i, element in enumerate(path):
print(element,end=',' if i<leng)-1 else '\n')
# 直接获取元素
for i in path:
print(i,end=',')
三、Python字符串切片操作
- 从左到右索引默认0开始
- 从右到左索引默认-1开始
0 1 2 3 4 5
" p y t h o n "
-6 -5 -4 -3 -2 -1
格式:[[start]:[end] [: step]] 包含索引 start 的字符,不包含索引 end 的字符,step 步长。
>>> s ='abcdef'
>>> s[1:5]
'bcde'
>>> s[:5]
'abcde'
>>> s[1:]
'bcdef'
>>> s[:]
'abcdef'
>>> s[::-1] # 反转字符串
'fedcba'
四、Python 转义字符
有些特殊字符没有办法用普通字符表示,需要进行转义。python 用反斜杠()转义字符。如:
\ (在行尾时) 续行符
\\ 反斜杠符号
\’ 单引号
\" 双引号
\n 换行
\r 回车
\v 纵向制表符
\t 横向制表符
>>> path = 'D:\Python38\nScripts'
>>> path
'D:\\Python38\nScripts'
>>> str(path)
'D:\\Python38\nScripts'
>>> path.__str__()
'D:\\Python38\nScripts'
>>> repr(path)
"'D:\\\\Python38\\nScripts'"
>>> path.__repr__()
"'D:\\\\Python38\\nScripts'"
>>> print(path)
D:\Python38
Scripts
注:
str:用户易读的表达式
repr:解释器易读的表达式,可以观察转义字符
path = 'D:/Python38/Scripts'
path = r"D:\Python38\Scripts"
path = "D:\\Python38\\Scripts"
>>> path = r'D:\Python38\nScripts'
>>> path
'D:\\Python38\\nScripts'
>>> str(path)
'D:\\Python38\\nScripts'
>>> repr(path)
"'D:\\\\Python38\\\\nScripts'"
>>> print(path)
D:\Python38\nScripts
>>> s = 'abcd \'x\' "y\" 1234'
五、Python 三引号
Python 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
>>> hi = '''hi
there'''
>>> hi # str()
'hi\nthere'
>>> print(hi) #
hi
there
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的 WYSIWYG(所见即所得)格式的。
一个典型的用例是,当你需要一块HTML或者SQL时,这时当用三引号标记,使用传统的转义字符体系将十分费神。
errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (
login VARCHAR(8),
uid INTEGER,
prid INTEGER)
''')
六、Python 字符串方法
Python 的字符串常用方法如下:
1、判断类型-9
isalnum() 是否由字母和数字组成。
isalpha() 是否只由字母或文字组成。
isdigit() 是否只由数字组成。
isnumeric() 是否只由数字组成,数字可以是: Unicode 数字,全角数字(双字节),罗马数字,汉字数字。指数类似 ² 与分数类似 ½ 也属于数字。
isdecimal() 是否只包含十进制字符,
isspace() 是否只由空白字符组成。 # s=' \t \n '
islower() 是否由小写字母组成。
isupper() 所有的字母是否都为大写。
istitle() 所有的单词拼写首字母是否为大写,且其他字母为小写。
2、查找和替换-7
endswith(suffix[, start[, end]]) 后缀是 suffix 为 True
startswith(substr, start=0,end=len(string)) 开头是 substr 为 True
find(sub, start=0, end=len(string)) 返回第一个 sub 开始的索引值或 -1
rfind(sub, start=0, end=len(string)) 从右边开始查找.
index(sub, start=0, end=len(string)) 跟find()方法一样,只不过 sub 不存在会报一个异常.
rindex( sub, start=0, end=len(string)) 过是从右边开始.
replace(old, new [, max]) old 替换成 new ,替换不超过 max 次。
3、大小写转换-5
capitalize() 第一个字符转换为大写,其它为小写。
title() 所有单词都是以大写开始,其余字母均为小写。
upper() 小写字母为大写
lower() 大写字符为小写.
swapcase() 大写转换为小写,小写转换为大写。
4、文本对齐-3
rjust(width,[, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
ljust(width[, fillchar]) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
center(width, fillchar) 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
5、去除空白字符-3
strip([chars]) 移除字符串头尾指定的字符(默认为空格)或字符序列。
lstrip() 截掉字符串左边的空白字符
rstrip() 删除字符串末尾的空白字符
6、拆分和连接-3
split(str="", num=string.count(str)) num=string.count(str)) 以 str 为分隔符截取字符串,仅截取 num+1 个子字符串
splitlines([keepends]) 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
str.join(seq) 以指定字符串 str 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
7、其它-10
count(sub, start=0, end=len(string)) 返回 sub 在 string 里面出现的次数
bytes.decode(encoding=“utf-8”, errors=“strict”) Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
encode(encoding=‘UTF-8’,errors=‘strict’) 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。
len(string) 返回字符串长度
zfill (width) 返回长度为 width 的字符串,原字符串右对齐,前面填充0
maketrans() 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
translate(table, deletechars="") 根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
实例:
s = 'this is a Python program'
c = s.capitalize()
t = s.title()
u = s.upper()
l = s.lower()
print(s,c,t,u,l,sep='\n')
yes = input('请确认(y/Y):')
# if yes.upper() == 'Y':
if yes in 'yY':
print('yes')
else:
print('no')
内置类
class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')
返回 object 的 字符串 版本。 如果未提供 object 则返回空字符串。如果 encoding 或 errors 均未给出,str(object) 返回 object.str(),这是 object 的“非正式”或格式良好的字符串表示。 对于字符串对象,这是该字符串本身。 如果 object 没有 str() 方法,则 str() 将回退为返回 repr(object)。
如果 encoding 或 errors 至少给出其中之一,则 object 应该是一个 bytes-like object (例如 bytes 或 bytearray)。 在此情况下,如果 object 是一个 bytes (或 bytearray) 对象,则 str(bytes, encoding, errors) 等价于 bytes.decode(encoding, errors)。 否则的话,会在调用 bytes.decode() 之前获取缓冲区对象下层的 bytes 对象。
将一个 bytes 对象传入 str() 而不给出 encoding 或 errors 参数的操作属于第一种情况, 将返回非正式的字符串表示。 例如:
>>> str(b'Zoot!')
"b'Zoot!'"
str() 函数将对象转化为适于人阅读的形式。
>>> dict = {'baidu': 'baidu.com', 'google': 'google.com'};
>>> str(dict) "{'google': 'google.com', 'baidu': 'baidu.com'}"