位置:首页 > 脚本语言 > Python在线教程 > Python字符串

Python字符串

字符串类型在Python中是最流行的。可以通过在引号包围的字符简单地创建它们。Python使用单引号和双引号来表示字符串是一样的。

创建字符串很简单,只要将值分配给一个变量。例如:

var1 = 'Hello World!'
var2 = "Python Programming"

访问字符串值:

Python不支持字符类型;这些都被视为一个长度的字符串,因此也被认为是一个子串。

要访问子字符串,用方括号随着指数或索引来获得子切片。下面是一个简单的例子:

#!/usr/bin/python

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

当执行上面的代码中,产生以下结果:

var1[0]:  H
var2[1:5]:  ytho

更新字符串:

可以在“更新”现有的由(重新)分配一个变量赋值给另一个字符串的字符串。新的值可以与它以前的值或一个串完全不同。下面是一个简单的例子:

#!/usr/bin/python

var1 = 'Hello World!'

print "Updated String :- ", var1[:6] + 'Python'

当执行上面的代码中,产生以下结果:

Updated String :-  Hello Python

转义字符:

下表是未转义非打印字符的列表,可以用反斜线符号来表示。

转义字符被解释;在一个单引号和双引号字符串。

反斜线 
符号
十六进制
字符
描述
a 0x07 铃声或警报
 0x08 退格键
cx   Control-x
C-x   Control-x
e 0x1b 转义
f 0x0c 换页
M-C-x   Meta-Control-x
0x0a 新一行
nn   八进制表示法,其中n的范围为0.7
0x0d 回车
s 0x20 空格
0x09 Tab键
v 0x0b 垂直制表
x   字符x
xnn   十六进制表示法,其中n的范围是从0.9,a.f,或AF

字符串特殊操作符:

假设字符串变量中保存'Hello'和变量b持有'Python':

操作符 描述 例子
+ 串联- 对操作符的两侧值增加 a + b 的值为 HelloPython
* 重复 - 创建新的字符串,链接相同的字符串的多个副本 a*2 的值为 -HelloHello
[] 切片- 从给定的索引字符指定 a[1] 的值为 e
[ : ] 范围切片 - 给定的范围内的字符 a[1:4] 的值为 ell
in 成员 - 如果一个字符存在给定的字符串中,则返回true H in a 结果值为 1
not in 成员 - 如果输入的字符不给定的字符串中不存在,则返回true M not in a 结果值为 1
r/R 原始字符串- 禁止转义字符的实际意义。语法原始字符串是完全一样的普通字符串,除了原始的字符串运算符,字母“r”,这之前的引号。在“r”可以小写(r)或大写字母(R)的,必须立即放置在第一引号前面。 print r' ' 打印 并且 print R' ' 打印 
% 格式 - 执行字符串格式化 请参阅下一节

字符串格式化操作:

Python最酷的功能是字符串格式运算符%。这种操作是唯一的字符串,弥补了C语言的printf()系列函数功能。下面是一个简单的例子:

#!/usr/bin/python

print "My name is %s and weight is %d kg!" % ('Zara', 21) 

当执行上面的代码中,产生以下结果:

My name is Zara and weight is 21 kg!

下面是完整的,它可以与%符号使用列表:

格式符号 转换
%c 字符
%s 通过str() 字符串转换来格式化
%i 有符号十进制整数
%d 有符号十进制整数
%u 无符号十进制整数
%o 八进制整数
%x 十六进制整数(小写字母)
%X 十六进制整数(大写字母)
%e 索引符号(小写'e')
%E 索引符号(大写“E”)
%f 浮点实数
%g %f和%e 的简写
%G %f和%E的简写

其他支持的符号和功能如下表:

符号 功能
* 参数指定宽度和精度
- 左对齐
+ 显示符号
<sp> 一个正数前留一个空格
# 添加前导零('0')或十六进制前导0x“或”0X“,取决于”x“或”X“是否使用八进制。
0 从键盘左边添加零(而不是空格)
% '%%'给留下一个文字'%'
(var) 映射变量(字典参数)
m.n. m是最小的总宽度和n是数字,显示小数点后的位数(如果appl)

三重引号:

Python三重引号允许字符串跨越多行,包括逐字换行符,制表符和其他特殊字符。

三重引号语法由三个连续的单引号或双引号。

#!/usr/bin/python

para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( 	 ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ 
 ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str;

当执行上面的代码中,产生以下结果。请注意如何每一个特殊字符被转换到打印形式,一直到最后的换行符之间的字符串“up”结束闭三重引号。还要注意的是发生或者使用显式回车在一行或它的转义代码( n)的尾部的换行:

this is a long string that is made up of
several lines and non-printable characters such as
TAB (    ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
 ], or just a NEWLINE within
the variable assignment will also show up.

原始字符串不把反斜杠作为一个特殊字符。把一个原始字符串的每个字符保持写的方式:

#!/usr/bin/python

print 'C:\nowhere'

当执行上面的代码中,产生以下结果:

C:
owhere

现在利用原始的字符串。我们表达如下:

#!/usr/bin/python

print r'C:\nowhere'

当执行上面的代码中,产生以下结果:

C:\nowhere

Unicode字符串:

在Python普通字符串在内部存储为8位ASCII,而Unicode字符串被作为16位Unicode存储。这使得一组字符更加多样化,包括大多数语言在世界上的特殊字符。限制处理Unicode字符串,注意以下几点:

#!/usr/bin/python

print u'Hello, world!'

当执行上面的代码,产生以下结果:

Hello, world!

正如你所看到的,Unicode字符串使用前缀 u,就像原始字符串使用前缀 r

字符串内置方法:

Python的包括以下内建的方法操作字符串:

SN 方法及描述
1 capitalize()
字符串的第一个字母大写
2 center(width, fillchar)
返回一个空格填充字符串为中心,以总宽度列的原始字符串
3 count(str, beg= 0,end=len(string))
开始索引beg和结束索引结束str多少次出现在字符串或字符串的子串
4 decode(encoding='UTF-8',errors='strict')
使用注册编码的编解码器的字符串进行解码。编码默认为默认的字符串编码。
5 encode(encoding='UTF-8',errors='strict')
返回编码字符串的字符串版本;对错误,默认是引发ValueError除非错误被赋予了“ignore”或“replace”。
6 endswith(suffix, beg=0, end=len(string))
判断字符串或字符串的一个子串(如果起始索引beg和给出end结束索引)与后缀结尾;如果是则返回true,否则为false,
7 expandtabs(tabsize=8)
扩展选项卡中的字符串多个空格;如果未提供tab大小默认为每片8位
8 find(str, beg=0 end=len(string))
确定str开始索引beg和end索引并返回索引,如果找到出现在字符串或字符串的子串,否则返回-1
9 index(str, beg=0, end=len(string))
与find()一样,但会引发一个异常如果str没找到
10 isalnum()
如果string至少有1个字符,所有字符为字母数字则返回true,否则为false
11 isalpha()
如果string至少有1个字符,所有字符都是字母,否则为false,则返回true
12 isdigit()
如果字符串只包含数字则返回true,否则为false
13 islower()
如果字符串至少有1个字符,所有字符是小写则返回true,否则为false
14 isnumeric()
如果一个Unicode字符串只包含数字字符则返回true,否则为false。
15 isspace()
如果字符串只包含空格字符则返回true,否则返回false,
16 istitle()
返回true如果字符串是正确的“首字母大写”,否则为false
17 isupper()
返回true如果字符串至少有一个小写字符,所有字符符为大写字母,否则返回false。
18 join(seq)
合并(会连接)序列seq元素连接成一个字符串的字符串表示形式,用分隔符的字符串
19 len(string)
返回字符串的长度
20 ljust(width[, fillchar])
返回一个空格填充字符串,原始字符串左对齐,以总宽列
21 lower()
将所有大写字母的字符串转化为小写
22 lstrip()
删除字符串中的所有前导空格
23 maketrans()
返回要用于转换功能的转换表
24 max(str)
从字符串str返回的最大字母字符
25 min(str)
从字符串str返回最小字母字符
26 replace(old, new [, max])
取代了旧的所有出现在字符串使用新的或max,如果给定max
27 rfind(str, beg=0,end=len(string))
与find()一样,但反向搜索字符串
28 rindex( str, beg=0, end=len(string))
与index()一样,但反向搜索字符串
29 rjust(width,[, fillchar])
返回一个空格填充字符串右对齐,以原始字符串总宽度列。
30 rstrip()
删除字符串的所有行尾空白
31 split(str="", num=string.count(str))
根据分隔符str (如果没有提供空间)和子字符串返回分割字符串列表;分成最多num子字符串。
32 splitlines( num=string.count(' '))
Splits string at all (or num) NEWLINEs and returns a list of each line with NEWLINEs removed
33 startswith(str, beg=0,end=len(string))
判断字符串或字符串的一个子串(如果起始索引beg和end索引)开始字符串str;如果是则返回true,否则为false
34 strip([chars])
在字符串执行两种lstrip()和rstrip()
35 swapcase()
反转大小写,在字符串中的所有字母
36 title()
返回“标题大字”版本字符串,也就是所有的字以大写,其余为小写
37 translate(table, deletechars="")
根据转换表str(256字)转换字符串,删除那些del字符串
38 upper()
字符串小写转换为大写字母
39 zfill (width)
返回leftpadded零合共宽字符原字符串;用于数字zfill()保留给予任何迹象(减去一个零)
40 isdecimal()
如果一个Unicode字符串只包含十进制字符则返回true,否则返回false