Python 不支持单字符类型,一个字符在 Python 中,也是作为一个字符串使用。
可以通过索引和切片来访问字符串的值
mystr = 'hello world!'
print(mystr[3]) # 通过下标来访问
print(mystr[2:6:2]) # 通过切片来访问
Python 转义字符:
转义字符 | 描述 |
---|---|
\ | (在行尾时) 续行符 |
\ \ | 反斜杠符号 |
\’ | 单引号 |
‘’ | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\000 | 空 |
\n | 换行LF (line feed),另起一新行,光标在新行的开头。 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车CR (carriage return),光标回到一当前行的开头。(光标目前所在的行为当前行) |
\f | 换页 |
\yyy | 八进制数,y 代表 0~7 的字符,其实yyy就是字符对应的ASCII码,具体可以参考"ASCII码表"。例如:\012 代表换行。 |
\xyy | 十六进制数,以 \x 开头,y 代表的字符,具体数值可以参考"ASCII码表"例如:\x0a 代表换行 |
\other | 其它的字符以普通格式输出 |
注意:网上关于八进制数\yyy,有些表述是有问题的。他们写的内容是【"\oyy" 代表八进制数,其中yy代表的字符,例如:\o12代表换行】。这样的写法,在Python 2.7,Python3目前现有的版本中都是错的。
var1 = 'abcdeffghijklmn'
print(var1[:6]+'qwer') # 获取字符串的值
print("第1行 \
... 第2行 \
... 第3行") # \为续行符
print("我\\是\'中\''国人!") # 反斜杠、单引号、双引号
print("\a") #响铃, 执行后电脑有响声。
print("Hello World!") # 单词间空了两格 Hello World!
print("Hello \b World!")# 加上退格符后,只会显示一格
print("\000") # \000 为空
print("花\000\000花")
print("小\n红") # 换行
print("Hello \v World!") #纵向制表符
#由于很多控制台没法显示纵向制表符,只能显示 '口' 这样的字符。
print("Hello \t World!") #横向制表符,相当于一格tab键
print("Hello\rWorld!") #回车 World!
print("123456789\rABC") # 回车:光标回到一当前行的开头。(光标目前所在的行为当前行)
print("Hello \f World!") # 换页
#由于很多控制台没法显示纵向制表符,只能显示 '向上的箭头' 这样的字符。
print("花\012花") # \yyy 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
print("\110\145\154\154\157\40\127\157\162\154\144\41") #八进制数 Hello World!
print("花\x0a花") # \xyy 十六进制数,yy代表的字符,例如:\x0a 代表换行
print('\\n') # 其他字符
Python的字符串格式化有两种方式:%格式符方式,format方式
%格式符方式: %[(name)][flags][width].[precision]typecode
参数:
符号 | 含义 |
---|---|
+ | 右对齐;正数前加正号,负数前加负号; |
- | 左对齐;正数前无符号,负数前加负号; |
0 | 右对齐;正数前无符号,负数前加负号;用0填充空白处 |
空格 | 右对齐;正数前加空格,负数前加负号; |
width 可选,占有宽度,小数点算一位;
precision 可选,小数点后保留的位数
typecode 必选:
s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置,字符串没有引号
r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置,字符串有引号
c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
o,将整数转换成八进制表示,并将其格式化到指定位置
x,将整数转换成十六进制表示,并将其格式化到指定位置(小写)
X,将整数转换成十六进制表示,并将其格式化到指定位置(大写)
d,将整数、浮点数转换成十进制表示,并将其格式化到指定位置
e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
f,将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
F,同上
g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
%,当字符串中存在格式化标志时,需要用 %%表示一个百分号
%u, 格式化无符号整型
%p, 用十六进制数格式化变量的地址
注:Python中百分号格式化,是不存在自动将整数转换成二进制表示的方式
print("名字%(name)s,年龄%(age)d!" %{'name':'花花','age':18})
print('花花%s' %123, '%s' %'456')
print('花花%r' %123, '%r' %'456')
print('%s' %'hello')
print('%r' %'hello')
print('%c' %'h','%c' %65)
print('%o' %8)
print('%x' %66)
print('%d' %66,'%d' %12.7)
print('%e' %66,'%e' %12.7888888666)
print('%E' %66,'%E' %12.78888888888)
print('%f' %66,'%f' %8888888.3333)
print('%F' %66,'%10F' %8888888.3333)
print('%g' %66,'%10g' %1234567889)
print('%G' %66,'%10G' %1234567890)
format方式:
数字格式的定义以 ‘:’ 号开始。碰到了’:'字符,就知道要定义一个数字的显示格式了。
格式的定义顺序为::[fill][align][sign][#][0][width][,][.precision][type]
fill 【可选】空白处填充的字符(只能取一个字符)
align 【可选】对齐方式(需配合width使用)
<,内容左对齐
>,内容右对齐(默认)
=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
^,内容居中
sign 【可选】有无符号数字
+,正号加正,负号加负;
-,正号不变,负号加负;
空格 ,正号空格,负号加负;
‘#’ 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
‘,’ 【可选】为数字添加分隔符,如:1,000,000
width 【可选】格式化位所占宽度
.precision【可选】小数位保留精度
type 【可选】格式化类型
<1> 传入” 字符串类型 “的参数
s,格式化字符串类型数据
空白,未指定类型,则默认是None,同s
<2> 传入“ 整数类型 ”的参数
b,将10进制整数自动转换成2进制表示,然后格式化;
c,将10进制整数自动转换为其对应的unicode字符;
d,十进制整数;
o,将10进制整数自动转换成8进制表示,然后格式化;
x,将10进制整数自动转换成16进制表示,然后格式化(加上#,显示小写x);
X,将10进制整数自动转换成16进制表示,然后格式化(加上#,显示大写X);
<3> 传入“ 浮点型或小数类型 ”的参数;
e, 转换为科学计数法(小写e)表示,然后格式化;
E, 转换为科学计数法(大写E)表示,然后格式化;
f ,转换为浮点型(默认小数点后保留6位)表示,然后格式化;
F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
g, 自动在e和f中切换;
G, 自动在E和F中切换;
%, 显示百分比(把数乘以100,显示百分比,默认显示小数点后6位);
代码1:
print('{},你好!'.format('花花'))
print('{:s},今年{:}岁!'.format('花花','12'))
print('{:s},今年{:c}岁!'.format('花花',65))
代码2:
print('{:s},今年{:b}岁!'.format('花花',65)) #b,将10进制整数,转换成2进制
print('{:s},今年{:o}岁!'.format('花花',65)) #o,将10进制整数,转换成8进制表示
print('{:s},今年{:d}岁!'.format('花花',65)) #d,十进制整数;
print('{:s},今年{:x}岁!'.format('花花',65)) #x,将10进制整数,转换成16进制表示
print('{:s},今年{:X}岁!'.format('花花',65)) #X,将10进制整数,转换成16进制表示
代码3:
print("15的 二进制{:b},八进制{:o},十进制{:d},十六进制{:x},十六进制{:X}".format(15, 15, 15, 15, 15))
print("65的 二进制{:#b},八进制{:#o},十进制{:#d},十六进制{:#x},十六进制{:#X}".format(65, 65, 65, 65, 65)) # 对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
代码4:
print("{3:b},{2:o},{0:d},{1:x},{0:X}".format(66,77,88,3)) # :前面是索引
print("{num1:b},{num2:o},{num2:d},{num2:x},{num1:X}".format(num1=66,num2=88)) # :前面是变量名
print('{:s},今年{:e}岁!'.format('花花',18.888888))
print('{:s},今年{:E}岁!'.format('花花',18.888888))
print('{:s},今年{:f}岁!'.format('花花',18.888888))
print('{:s},今年{:F}岁!'.format('花花',18.888888))
print('{:g},{:g}'.format(666666666,18.888888))
print('{:G},{:G}'.format(666666666,18.888888))
print('{:,}'.format(1234567890)) #,号为数字添加分隔符,如:1,234,567,890
print('{:.2f}'.format(66))
print('{:.2%}'.format(0.66)) #% 显示百分比(默认显示小数点后6位)
print('名字叫{2},今年{1}岁!'.format('花花',15,'小花',18,'红红',20))
print('名字叫{2},今年{1}岁!'.format(*['花花',15,'小花',18,'红红',20])) # * 解包列表
print('名字叫{0[1]},今年{0[2]}岁!'.format(['花花',15,'小花',18,'红红',20]))
print('名字叫{1[1]},今年{0[2]}岁!'.format([15,18,20],['花花','小花','红红']))
print('名字叫{name},今年{age}岁!'.format(name='花花',age=18))
print('名字叫{name},今年{age}岁!'.format(**{'name':'花花','age':18})) # **解包字典
print('{:15f}'.format(66))
print('{:015f}'.format(66))
print('{:#015o}'.format(66))
print('{:+15f}'.format(66))
print('{:+15f}'.format(-66))
print('{:-15f}'.format(66))
print('{:-15f}'.format(-66))
print('{:15f}'.format(66))
print('{: 15f}'.format(66))
print('花花{:<15f}红红'.format(66)) #<,内容左对齐
print('花花{:>15f}红红'.format(66)) #>,内容右对齐(默认)
print('花花{:=+015f}红红'.format(66)) #=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
print('花花{:^15f}红红'.format(66)) #^,内容居中
print('花花{:p^15f}红红'.format(66)) #fill的值取z,【可选】空白处用字符p来填充
print('花花{:h^015f}红红'.format(66)) #花花 hhh66.000000hhh 红红,0不在起作用了
mystr = 'hELLo world!'
print(mystr.capitalize())
print('123123 hELLo WORLD!'.capitalize())
print('花花 hELLo WORLD!'.capitalize())
运行效果:
2. string.center(width[, fillchar]) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
参数
width – 字符串的总宽度。
fillchar – 填充字符。默认是空格,只能是单个字符;如果 width 小于字符串宽度直接返回字符串,不会截断:
返回值:返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充。
print('huahua'.center(4))
print('huahua'.center(10,'@'))
print('huahua uu qq uu'.count('u')) # 返回u在前面字符串中的次数为6次。
print('huahua uu qq uu'.count('uu')) # 返回uu在前面字符串中的次数为2次。
print('huahua uu qq uu'.count('u',3,30))
print('huahua uu qq uu'.count('u',3,-30))
bytes.decode(encoding=“utf-8”, errors=“strict”) 以指定的编码格式解码 bytes 对象。默认编码为 ‘utf-8’。
Python3 的字符串中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
参数:
encoding – 要使用的编码,如"UTF-8"。
errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值。
返回值:该方法返回解码后的字符串。
str1 = '123 huahua 花花'.encode('GBK')
str2 = '123 huahua 花花'.encode('UTF-8')
print("GBK 编码:",str1)
print("UTF-8 编码:",str2)
str3 = str1.decode('GBK','strict')
print("GBK 解码:",str3)
str4 = str2.decode('UTF-8','strict')
print("UTF-8 解码:",str4)
str1 = 'hua uhello hua world hua'
str2 = 'hua'
print(str1.startswith(str2))
print(str1.startswith('u',4,8))
str.endswith(suffix[, start[, end]]) 检查字符串是否以 suffix 结束
参数
suffix – 该参数可以是一个字符串或者是一个元素。
start – 字符串中的开始位置,包含。
end – 字符中结束位置,不包含。
返回值:如果字符串含有指定的后缀返回 True,否则返回 False。
str1 = 'hello hua world hua'
str2 = 'hua'
print(str1.endswith(str2))
print(str1.endswith('u',4,8))
str1 = "huahua\t12345\tabc\t"
print('1111111122222222333333334444444455555555')
print(str1.expandtabs(),'花花') # 默认8个空格
# huahua 有 6 个字符,后面的 \t 填充 2 个空格
# 12345 有 5 个字符,后面的 \t 填充 3 个空格
# abc 有 3 个字符,后面的 \t 填充 5 个空格
print(str1.expandtabs(2),'花花') # \t代表 2 个空格
# huahua 有 6 个字符,刚好是 2 的 3 倍,后面的 \t 填充 2 个空格
# 12345 有 5 个字符,不是 2 的倍数,后面的 \t 填充 1 个空格
# abc 有 3 个字符,不是 2 的倍数,后面的 \t 填充 1 个空格
print(str1.expandtabs(3),'花花') # \t代表 3 个空格
# huahua 有 6 个字符,刚好是 3 的 2 倍,后面的 \t 填充 3 个空格
# 12345 有 5 个字符,不是 3 的倍数,后面的 \t 填充 1 个空格
# abc 有 3 个字符,是 3 的倍数,后面的 \t 填充 3 个空格
print(str1.expandtabs(4),'花花') # \t代表 4 个空格
# huahua 有 6 个字符,不是 4 的倍数,后面的 \t 填充 2 个空格
# 12345 有 5 个字符,不是 4 的倍数,后面的 \t 填充 3 个空格
# abc 有 3 个字符,不是 4 的倍数,后面的 \t 填充 1 个空格
print(str1.expandtabs(5),'花花')
print(str1.expandtabs(6),'花花')
print('bcadefaghijk'.find('a')) # 查找开头
print('bcadefaghijk'.find('a',3,7))
print('bcadefaghijk'.find('zz'))
print('bcadefaghijak'.rfind('a',3,7)) #查找结尾
print('bcadefaghijk'.index('a'))
print('bcadefaghijk'.index('a',3,7))
#print('bcadefaghijk'.index('zz')) # 没找到则抛出异常
print('bcadefaaghaaijk'.rindex('aa',3,90))
print ("huahua123".isalnum())
print ("huahua_123".isalnum())
print ("huahua123花花".isalnum()) # 字符串里面有汉字的话,也返回 True
print ("huahua花花".isalpha()) # 汉字也会返回 True
print ("huahua_123".isalpha())
print ("1234huahua".isalpha())
print ("1234".isdecimal())
print ("huahua123".isdecimal())
print ("123.4".isdecimal())
print('1234'.isdigit())
print('huahua1234'.isdigit())
print("123.4".isdigit())
print('10'.isnumeric())
print('10.1'.isnumeric())
print('½'.isnumeric())
print('²3455'.isnumeric())
print('\u00B23455'.isnumeric())
print("\u0030".isnumeric()) #unicode for 0
print("\u00B2".isnumeric()) #unicode for ²
print(' '.isspace())
print('hua hua '.isspace())
print('\t'.isspace())
print(''.isspace())
str.title(); 返回"标题化"的字符串,就是说所有单词的首个字母转化为大写,其余字母均为小写
无参数,返回值:返回"标题化"的字符串
print('Hello World'.istitle())
print('Hello World 123'.istitle())
print('hello World'.istitle())
print('HELLO World'.istitle())
print('HRllo World'.istitle())
print('my name is honghong!'.title())
print('my 3na3me !i!s 红hong红hong!'.title()) #非字母后的第一个字母将转换为大写字母
print('@'.join('hello'))
print('!'.join(['1','2','3','4']))
print('*'.join({'hello':12,'age':1})) # 针对字典,只能取对应的值
print(mystr.split()) #以空白字符为分隔符
print(mystr.split('*')) #以'*'为分隔符
print(mystr.split('*',1)) #以'*'为分隔符,分割1次
print('ab c\n\nde fg\rkl\r\nhuahua\trr'.splitlines()) #['ab c', '', 'de fg', 'kl', 'huahua\trr']
print('ab c\n\nde fg\rkl\r\nhuahua\trr'.splitlines(True)) #['ab c\n', '\n', 'de fg\r', 'kl\r\n', 'huahua\trr']
print('huahua'.ljust(10))
print('huahua'.ljust(10,'*'))
rjust(width,[, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
参数:
width – 指定填充指定字符后中字符串的总长度.
fillchar – 填充的字符,默认为空格。
返回值:返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串
print ("huahua123!!!".rjust(20, '*')) #********huahua123!!!
print ("huahua".rjust(10, '*'),'18'.rjust(6,'!'))
print('huahua'.zfill(3)) # 原样显示
print('huahua'.zfill(10))
print('huahua'.rjust(10,"0")) # 作用相当于:'huahua'.zfill(10)
print('huahua123'.islower())
print('huahua123花花#!'.islower())# True
print('HUAHUA123'.islower())
print('hua 123 HUA'.islower())
print('\t'.islower()) #False
string.isupper() 检测字符串中所有的字母是否都为大写。如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
print('huahua123'.isupper())
print('Huahua123'.isupper())
print('HUAHUA123花花#!'.isupper())
print('HELLO World !123'.lower())
运行结果:
hello world !123
string.upper() 把 string 中所有大写字符转换为大写. 返回转换后的新字符串。
print('HELLO World !123'.upper())
运行结果:
HELLO WORLD !123
print('HELLO World !123'.swapcase())
运行结果:
hello wORLD !123
mystr = '\ta\nb\tc\f'
print(mystr)
print(mystr.lstrip())
print(mystr.lstrip(None))
print('\ta\nb\tc\fqq'.rstrip('qq'))
print('www.huaohua.com'.lstrip('cmowz.'))
print('www.huaohua.com'.rstrip('cmowz.'))
print('www.huaohua.com'.strip('cmowz.'))
str1 = "abcedf"
str2 = "123456"
result = str.maketrans(str1, str2)
print(result)
str = "aaeehhcc!"
print (str.translate(result)) # translate的用法下一个函数介绍。
1> 一个参数,该参数必须为字典
d = {'a':'1','b':'2','c':'3','d':'4','e':'5','s':'6'}
result = str.maketrans(d) # 制作翻译表
print('i like you aa'.translate(result)) # 翻译
运行结果:
i lik5 you 11
2> 两个参数 x 和 y,x、y 必须是长度相等的字符串,并且 x 中每个字符映射到 y 中相同位置的字符.
str1 = 'abcdefs'
str2 = '1234567'
result = str.maketrans(str1,str2)
print('loveyou,haha'.translate(result))
运行结果:
lov5you,h1h1
3> 三个参数 x、y、z,第三个参数 z 必须是字符串,其字符将被映射为 None,即删除该字符;
如果 z 中字符与 x 中字符重复,该重复的字符在最终结果中还是会被删除。
也就是无论是否重复,只要有第三个参数 z,z 中的字符都会被删除。
str1 = 'abcdefs'
str2 ='1234567'
str3 ='ot'
result = str.maketrans(str1,str2,str3)
print('she love you! t a'.translate(result)) # 在字符串中'she love you! t a',带有str3 变量中的字符,全部被去掉。
运行结果:
7h5 lv5 yu! 1
4> 过滤掉的字符 o
制作翻译表:把小写字母转为大写字母
bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
转换为大写,并删除字母o
print(b'hello ou mygod maita'.translate(bytes_tabtrans, b'o'))
运行结果:
b’HELL U MYGD MAITA’
maketrans 的扩展:
str 类型的 translate() 函数只接受一个参数,没有原文中的第二个 deletechars 参数。bytearray, bytes 和 str 三种对象的 translate() 函数原型抄写如下:
bytearray.translate(table, delete=b’’)
bytes.translate(table, delete=b’’)
str.translate(table)
print(max('andzbfhZsiS'))
print(min('andbfhsiA'))
mystr = 'she is huahua,he is huahua'
print(mystr.replace('huahua','honghong'))
print(mystr.replace('huahua','honghong',1))
print('aa*bb*cc'.partition("*"))# 第2个'*'不会被分割,结果是:('aa', '*', 'bb*cc')
运行结果:
(‘aa’, ‘’, 'bbcc’)
30. str.len(obj) 方法返回对象(字符、列表、元组等)长度或项目个数。
注意:len()是内置函数,返回对象的长度(元素个数)。len()不是字符串类的方法。
实参:可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。
print(len('hello'))
运行结果: 5