Python字符串

常见字符串常量和表达式

操作解释
s = ”空字符串
s = “Tom’s” 双引号和单引号的使用
s = ‘s\np\ta\x00m’转义序列
s = “””…”””三重引号字符串块
s = r’\temp\spam’Raw字符串
s = b’Tom’Python3中的字节字符串
s = u’Tom’仅在python2.6中使用的Unicode字符串
s1 + s2
s * 3
合并
重复
s[i]
s[i:j]
len(s)
索引
分片
求长度
“a %s parrot”%kind字符串格式化表达式
“a {0} parrot”.format(kind)字符串格式化方法
s.find(‘pa’)字符串方法调用:搜索
s.rstrip()移除空格
s.replac e(‘pa’,’xx’)替换
s.split(‘,’)用展位符分隔
s.isdigit()内容测试
s.lower()短信息转换
s.endswith(‘spam’)结束测试
‘spam’.join(strlist)插入分隔符
s.encode(‘latin-1’)Unicode编码等
for i in s:print(i)
‘spam’ in s
[c * 2 for c in s]
map(ord,s)
迭代,成员关系

字符串形式

字符串常量

  • 单引号(注意引号为英文状态下的)
    ‘hello’
  • 双引号
    “Tom’s”
  • 三引号
    包括多行字符串常量(块字符串);也可作为多行注释;
    ”’
    Hello
    world
    ”’
  • 转义字符
    “s\tp\na\om”
  • Raw字符串
    r”C:\home\admin”
  • Python3中的Byte字符串
    b”sp\x01am”
  • 仅在Python2.6中使用的Unicode字符串
    u”eggs\u0020spam”

原始(raw)字符串常量

抑制转义机制。

s = r'hello\world'
print(s)
hello\world

注意:一个raw字符串不能以奇数个反斜杠结束。最后一个反斜杠会转义后续引用的字符,帮最后一个转义字符将引号转义了。如果需要使用单个反斜杠结果的字符,可以使用以下形式。

r'\root'+'\\'

转义字符

转义字符描述
\newline忽视(连续)
\\反斜杠符号
\’单引号
\”双引号
\a响铃
\b退格(Backspace)
\e转义
\000
\n换行
\v纵向制表符
\t横向制表符
\r回车
\f换页
\oyy八进制数,yy代表的字符,例如:\o12代表换行
\xyy十六进制数,yy代表的字符,例如:\x0a代表换行
\N{id}Unicode数据库ID
\uhhhhUnicode16位的十六进制值
\UhhhhhhhhUnicode32位的十六进制值
\0Null(不是字符串结尾)
\other其它的字符以普通格式输出

格式化字符串

基本概念

%[(name)][flags][width][.precision]typecode

字符串格式化符号:

符   号描述
      %c 格式化字符及其ASCII码
      %s 格式化字符串
      %d 格式化整数
      %u 格式化无符号整型
      %o 格式化无符号八进制数
      %x 格式化无符号十六进制数
      %X 格式化无符号十六进制数(大写)
      %f 格式化浮点数字,可指定小数点后的精度
      %e 用科学计数法格式化浮点数
      %E 作用同%e,用科学计数法格式化浮点数
      %g %f和%e的简写
      %G %f 和 %E 的简写
      %p 用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号功能
*定义宽度或者小数点精度
用做左对齐
+在正数前面显示加号( + )
<sp>在正数前面显示空格
#在八进制数前面显示零(‘0′),在十六进制前面显示’0x’或者’0X'(取决于用的是’x’还是’X’)
0显示的数字前面填充’0’而不是默认的空格
%‘%%’输出一个单一的’%’
(var)映射变量(字典参数)
m.n.m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

可以参考内置函数print()

基于字典的字符串格式化

可以通过字典将值传入格式化字符

s = "%(name)s %(age)d"%{'name':'Tom','age':18}
print(s)
Tom 18

字符串格式化调用方法(format())

语法
replacement_field    ::=  “{” [field_name] [“!” conversion] [“:” format_spec] “}”
field_name           ::=      arg_name (“.” attribute_name | “[” element_index “]”)*
arg_name             ::=      [identifier | integer]
attribute_name       ::=      identifier
element_index        ::=      integer | index_string
index_string         ::=      <any source character except “]”> +
conversion           ::=      “r” | “s” | “a”
format_spec          ::=      <described in the next p>
template1 = '{0},{1} and {2}'
template2 = '{motto},{pork} and {food}'
template3 = '{motto},{0} and {food}'
t1 = template1.format('spam','ham','eggs')
t2 = template2.format(motto='spam',pork='ham',food='egges')
t3 = template3.format('ham',motto='spam',food='eggs')
print(t1)
print(t2)
print(t3)
 spam,ham and eggs
 spam,ham and egges
 spam,ham and eggs
添加键、属性和偏移量

格式化字符串可以指定对象属性和字典键。

import sys
t = "I'm using a {0.platform} computer.".format(sys)
d = {'name':'Tom','age':18}
t2 = "{0[name]} is {0[age]} years old.".format(d)
l = [1,2,3]
t3 = '{0[0]},{0[2]}'.format(l)
print(t)
print(t2)
print(t3)
 I'm using a darwin computer.
 Tom is 18 years old.
 1,3
添加具体格式化

可以在格式化字符串中添加额外的语法来实现具体的层级,如字段大小、对齐方式各特定类型编码,具体格式如下:

{fieldname!conversionflag:formatspec}
  • fieldname:指定参数的一个数字或关键字,后面跟着可选的“.name”或“[index]”。
  • conversionflag:可以是r,s或a,分别表示repr,str,ascii内置函数的一次调用。
  • formatspec:指定如何表示该值,包括字段宽带、对方方式、补零、小数点精度等细节,并且以一个可选的数据类型编码结束。

formatspec格式

format_spec  ::=    [[fill]align][sign][#][0][width][,][.precision][type]
fill          ::=    <any character>
align         ::=    ”<” | “>” | “=” | “^”
sign         ::=    ”+” | “-” | ” “
width        ::=    integer
precision    ::=    integer
type         ::=    ”b” | “c” | “d” | “e” | “E” | “f” | “F” | “g” | “G” | “n” | “o” | “s” | “x” | “X” | “%”

如果指定了一个有效的 align 值,则可以在该值前面加一个 fill 字符,它可以为任意字符,如果省略则默认为 空格符。在 格式化字符串字面值或在使用str.format() 方法时是无法使用花括号字面值 (”{” or ”}”) 作为fill 字符的。但是,通过嵌套替换字段插入花括号则是可以的。这个限制不会影响format() 函数。 各种对齐选项的含义如下:

选项 含义
‘<‘ 强制字段在可用空间内左对齐(这是大多数对象的默认值)。
‘>’ 强制字段在可用空间内右对齐(这是数字的默认值)。
‘=’ 强制将填充放置在符号(如果有)之后但在数字之前。这用于以“+000000120”形式打印字段。此对齐选项仅对数字类型有效。当’0’ 紧接在字段宽度之前时,它成为默认值。
‘^’ 强制字段在可用空间内居中。

sign 选项仅对数字类型有效,可以是以下之一:

选项 含义
‘+’ 表示标志应该用于正数和负数。
‘-‘ 表示标志应仅用于负数(这是默认行为)。
space 表示应在正数上使用前导空格,在负数上使用减号。

%与format()比较

序列的特性

[su_accordion class=””][su_spoiler title=支持索引 open=”no” style=”default” icon=”plus” anchor=”” class=””]

s = 'hello'
s[1]
s[2]

[/su_spoiler][su_spoiler title=支持反向索引 open=”no” style=”default” icon=”plus” anchor=”” class=””]

s = 'hello'
s[-1]

[/su_spoiler][su_spoiler title=分片 open=”no” style=”default” icon=”plus” anchor=”” class=””]

s = "There is Ethan's blog."
print(s[9:])

[/su_spoiler][su_spoiler title=使用符号进行合并 open=”no” style=”default” icon=”plus” anchor=”” class=””]

s1 = "There is "
s2 = "Ethan's blog"
s = s1 + s2
print(s)
t = 'abc'
print(t * 3)
 There is Ethan's blog
 abcabcabc

[/su_spoiler][/su_accordion]

分片

当使用一对冒号分隔的偏移来索引字符串这样的序列对象时,Python将返回一个新的对象。
左边的偏移量为下边界,右边的偏移量为上边界。
Python将获取从下边界直到上边界但不包含上边界的所有元素,并返回一个包含了所有元素的新的对象。

当上边界或下边界没有给出时表示:
下边界没有给出表示从一个元素开始,上边界没有给出,表示直到最后一个元素,最后一个元素包含在内。

s = 'abcdef'
print(s[:2])
print(s[1:])
 ab
 bcdef
扩展分片:第三个限制值

第三个索引值,用作步进(stride)。

X[I:J:K]表示“索引X对象中的元素,从偏移为I直到偏移为J-1,第隔K个元素索引一次”。

s = 'abcdefghijk'
s[::2] #取偶数位
s[::-1] #逆序

不可变性

字符串在Python中具有不可变性,在创建后就不可以改变。

但是可以通过建立一个新的字符串来对其赋值进行改变。

#这是一个错误的示范
s = 'bbcdef'
s[0] = 'a'
s = 'hello'
s = s + 'world'

这个时候可能觉得每次需要修改时,就要创建一个新的对象,效率低下。但是,事实并非如此,Python在运行的过程中对不再使用的字符串对象自动进制垃圾收集(回收空间),所以新的对象占用了在前边的值所占用的空间(即原来的对象)。

注意

如果你不得不对一个越长的字符串进行许多修改,为了优化脚本的性能,最好将字符串转换为一个可以原地修改的对象。

s = 'hello'
l = list(s)

可以用join()方法将列表“合并”成一个字符串

''.join(l)

字符串方法

capitalize()center()count()encode()
endswith()expandtabs()find()format()
index()isalnum()isalpha()isdecimal()
isdigit()isidentifier()islower()isnumeric()
ljust()lower()lstrip()maketrans()
partition()replace()rfind()rindex()
rjust()rpartition()rsplit()rstrip()
split()splitlines()startswith()strip()
isprintable()isspace()istitle()isupper()
join()swapcase()title()translate()
upper()zfill()

find()

语法
find(sub[, start [, end ]])
作用

返回子字符串 sub 在 s[start:end] 切片内被找到的最小索引。可选参数 start 与 end 会被解读为切片 表示法。如果 sub 未被找到则返回 -1。

注意

find() 方法应该只在你需要知道 sub 所在位置时使用。要检查 sub 是否为子字符串,请使用 in 操作符:

'Py' in 'Python'

rstrip()

语法
作用

replace()

语法
replace(old, new[, count])
作用

返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。如果给出了可选参数 count,则 只替换前 count 次出现。

注意

replace()返回了一个新的对象,并不是在原地修改。

split()

语法
split(sep=None, maxsplit=-1)
  • maxsplit:最大拆分次数
  • sep:指定分隔符
作用

返回一个由字符串内单词组成的列表, 使用 sep 作为分隔字符串。 如果给出了 maxsplit, 则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)。

如果给出了sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串(例如’1,,2′.split(‘,’)将返回[‘1′,”,’2′])。sep参数可能由多个字符组成(例如’1<>2<>3’.split(‘<>’)将返回[‘1′,’2′,’3’])。使用指定的分隔符拆分空字符串将返回[”]。

如果 sep 未指定或为 None,则会应用另一种拆分算法:连续的空格会被视为单个分隔符,其结果将不包含开头或末尾的空字符串,如果字符串包含前缀或后缀空格的话。因此,使用 None 拆分空字符串或仅包含空格的字符串将返回 []。

isdigit()

语法
作用

lower()

语法
作用

endswith()

语法
作用

join()

语法
join(iterable)
作用

返回一个由 iterable 中的字符串拼接而成的字符串。如果 iterable 中存在任何非字符串值包括bytes 对象则会引发TypeError。调用该方法的字符串将作为元素之间的分隔。

encode()

语法
作用

rsplit()

语法
rsplit(sep=None, maxsplit=-1)
作用

返回一个由字符串内单词组成的列表, 使用 sep 作为分隔字符串。 如果给出了 maxsplit, 则最多进行 maxsplit 次拆分, 从 最右边开始。如果 sep 未指定或为 None,任何空白字符串都会被作为分隔符。除 了从右边开始拆分,rsplit() 的其他行为都类似于split()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值