晓夏

YoungCheung

Zhang Sir's technical way

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成员运算符 - 如果字符串中包含给定的字符返回 TrueH in a 输出结果 1
not in成员运算符 - 如果字符串中不包含给定的字符返回 TrueM 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')
True

string.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 old

string.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 found

string.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())
True

string.islower() #如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

>>> print('A'.islower())
False

string.isnumeric()  #如果 string 中只包含数字字符,则返回 True,否则返回 False

>>> print('A'.isnumeric())
False

string.isspace()   #如果 string 中只包含空格,则返回 True,否则返回 False.

>>> print(' '.isspace())
True

string.istitle()   #如果 string 是标题化的(见 title())则返回 True,否则返回 False

>>> print('My Name Is '.istitle()) #判断是不是一个title,
true

string.isupper() #如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

>>> print('A'.isupper())
True
>>> print('b'.isupper())
False

string.join(seq)   #Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

>>> print(','.join(['1','2','3','4'])) #给字符串加符号
1,2,3,4

string.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 j

string.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)
6

string.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'


神回复

发表评论:

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