Python数据类型之字符串操作
浏览量:774
字符串是 Python 中最常用的数据类型。我们可以使用引号来创建字符串。创建字符串很简单,只要为变量分配一个值即可。例如:
var1 = 'Hello World!' var2 = "Python"
Python截取字符串:
>>> var1="Hello World!" >>> var1 'Hello World!' >>> var1[0] 'H' >>> var1[1:5] 'ello' >>> var1[-1] '!'
Python修改/赋值字符串:
>>> var1="Hello World!" >>> var1 'Hello World!' >>> var1[:6] + 'zy' 'Hello zy'
python转移符:
在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符。如下表:
| 转义字符 | 描述 |
|---|---|
| \(在行尾时) | 续行符 |
| \\ | 反斜杠符号 |
| \' | 单引号 |
| \" | 双引号 |
| \a | 响铃 |
| \b | 退格(Backspace) |
| \e | 转义 |
| 00 | 空 |
| \n | 换行 |
| \v | 纵向制表符 |
| \t | 横向制表符 |
| \r | 回车 |
| \f | 换页 |
| \oyy | 八进制数,yy代表的字符,例如:\o12代表换行 |
| \xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
| \other | 其它的字符以普通格式输出 |
python字符串运算符
下表实例变量a值为字符串"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"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 | print r'\n' prints \n 和 print R'\n' prints \n |
| % | 格式字符串 |
示例:
# -*- coding:utf-8 -*-
a = "Hello"
b = "Python"
print("a + b 输出结果:", a + b)
print( "a * 2 输出结果:", a * 2)
print("a[1] 输出结果:", a[1])
print("a[1:4] 输出结果:", a[1:4] )
if( "H" in a) :
print( "H 在变量 a 中")
else :
print("H 不在变量 a 中")
if( "M" not in a) :
print("M 不在变量 a 中")
else :
print("M 在变量 a 中")
print(r'\n')
print(R'\n')执行结果:
a + b 输出结果: HelloPython a * 2 输出结果: HelloHello a[1] 输出结果: e a[1:4] 输出结果: ell H 在变量 a 中 M 不在变量 a 中 \n \n
Python字符串格式化
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
如下实例:
# -*- coding:utf-8 -*-
print("My name is %s and weight is %d kg!" % ('YoungCheung', 60) )执行结果:
My name is YoungCheung and weight is 60 kg!
python字符串格式化符号:
| 符 号 | 描述 |
|---|---|
| %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 是小数点后的位数(如果可用的话) |
字符串内建函数
string.capitalize() #把字符串的第一个字符大写
>>> name="jerry" >>> print(name.capitalize()) Jerry
string.center(width,, fillchar=None) #内容居中,width:字符串的总宽度;fillchar:填充字符,默认填充字符为空格。
# 定义一个字符串变量,名为"string",内容为"hello word" >>> string="hello word" # 输出这个字符串的长度,用len(value_name) >>> len(string) # 字符串的总宽度为10,填充的字符为"*" >>> string.center(10,"*") 'hello word' # 如果设置字符串的总产都为11,那么减去字符串长度10还剩下一个位置,这个位置就会被*所占用 >>> string.center(11,"*") '*hello word' # 是从左到右开始填充 >>> string.center(12,"*") '*hello word*'
string.count(str, beg=0, end=len(string))#返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
>>> string="hello world"
# 默认搜索出来的"l"是出现过两次的
>>> string.count("l")
3
# 如果指定从第三个位置开始搜索,搜索到第六个位置,"l"则出现过一次
>>> string.count("l",3,6)string.endswith(obj, beg=0, end=len(string))
#检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
>>> string="Hello World"
>>> string.endswith('d')
Truestring.expandtabs(tabsize=8) #把字符串 string 中的 tab 符号转为空格,默认的空格数 tabsize 是 8.
>>> string="Hello \tWorld" >>> string.expandtabs(tabsize=30) 'Hello World'
string.find(str, beg=0, end=len(string))
##检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
>>> string="Hello World"
>>> string
'Hello World'
>>> string[string.find("o"):]
'o World'format() 格式化输出
>>> name="my \tname is {name} and i am {year} old"
>>> print(name.format(name="zy",year="23"))
my name is zy and i am 23 old
>>> print(name.format_map({'name':'zy','year':21} ))
my name is zy and i am 21 oldstring.index(str, beg=0, end=len(string)) #跟find()方法一样,只不过如果str不在 string中会报一个异常.
>>> string[string.index("o"):]
'o World'
>>> string[string.index("q"):]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not foundstring.isalnum() #如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
>>> A="abc123" >>> A 'abc123' >>> print(A.isalnum()) True
string.isalpha() #如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
>>> A="abc123" >>> A 'abc123' >>> A.isalpha() False
string.isdigit() #如果 string 只包含数字则返回 True 否则返回 False.
>>> A="abc123" >>> A.isdigit() False
string.isdentifier() #判断是不是合法的变量名则返回 True 否则返回 False.
>>> print('A'.isidentifier())
Truestring.islower() #如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
>>> print('A'.islower())
Falsestring.isnumeric() #如果 string 中只包含数字字符,则返回 True,否则返回 False
>>> print('A'.isnumeric())
Falsestring.isspace() #如果 string 中只包含空格,则返回 True,否则返回 False.
>>> print(' '.isspace())
Truestring.istitle() #如果 string 是标题化的(见 title())则返回 True,否则返回 False
>>> print('My Name Is '.istitle()) #判断是不是一个title,
truestring.isupper() #如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
>>> print('A'.isupper())
True
>>> print('b'.isupper())
Falsestring.join(seq) #Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
>>> print(','.join(['1','2','3','4'])) #给字符串加符号
1,2,3,4string.ljust(width) #返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.rjust(width) #返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
name = "my name is jeery" print(name.ljust(50,'*')) #右边补位 print(name.rjust(50,'-')) #左边补位 my name is jeery********************************** ----------------------------------my name is jeery
string.lower()转换 string 中所有大写字符为小写.
>>> A="AbCdEfG" >>> A 'AbCdEfG' >>> A.lower() 'abcdefg'
string.lstrip()截掉 string 左边的空格
print("\njerry ".lstrip()) #去掉左边空格
print(" jerry\n".strip()) #去掉右边空格
print('----')
jerry
jerry
----max(str)返回字符串 str 中最大的字母。
min(str)返回字符串 str 中最小的字母。
>>> A="AbCdEf" >>> max(A) 'f' >>> min(A) 'A'
string.replace(str1, str2, num=string.count(str1)) #把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
>>> print('jerry j'.replace('j','J'))
Jerry J
>>> print('jerry j'.replace('j','J',1))
Jerry jstring.rfind(str, beg=0,end=len(string) )类似于 find()函数,不过是从右边开始查找.
string.rindex( str, beg=0,end=len(string))类似于 index(),不过是从右边开始.
>>> A="abcdcba"
>>> A
'abcdcba'
>>> A.rindex("a",1)
6
>>> A.rfind("a",1)
6string.rstrip()删除 string 字符串末尾的空格.
>>> A="abcdcba " >>> A 'abcdcba ' >>> A.rstrip() 'abcdcba'
string.split(str="", num=string.count(str))以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
print('jerry j'.split()) #按照空格分成列表
print('jerry j'.split('j')) #按照j分成列表
['jerry', 'j']
['', 'erry ', '']string.splitlines(num=string.count('\n'))##按照行分隔,返回一个包含各行作为元素的列表,如果 num 指定则仅切片 num 个行.
print('jerry\nj'.splitlines()) #按行分
['jerry', 'j']string.swapcase()翻转 string 中的大小写
>>> A="AbCdEf" >>> A.swapcase() 'aBcDeF'
string.title() #返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
>>> A="Title is ok" >>> A.istitle() False
string.upper() #转换 string 中的小写字母为大写
>>> A="AbCdEf" >>> A.upper() 'ABCDEF'
string.zfill(width) #返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
>>> A="123" >>> A '123' >>> A.zfill(20) '00000000000000000123'

神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。