python字符型数据_Python基础【第五篇】:基础数据类型(字符型)

String(字符串)

字符串的形式

在python中字符串可以用’ ‘(单引号),“ ”(双引号),和’‘’ ‘’‘(三个单引号)。

string1 = 'james'string2= '''kobe'''string3= "jordan"

print(string1,string2,string3)

python中访问字符串的方法

Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。

Python 访问子字符串,可以使用方括号来截取字符串

string = 'abcdefg'

#1.string[0:n]表示,从从第一个元素到第n个元素

print("前四个元素:",string[0:4])#2.string[a:b]表示从第a+1个元素到第b个元素

print("第二个元素到第三个元素:",string[1:3])#3.string[:n]表示前n个元素

print("前三个元素:",string[:3])#4.string[n:]表示从第n+1个元素到最后

print("第四个元素到最后一个元素:",string[3:])#5.string[:]等价于字符串本身

print("所有的元素:",string[:])#6.string[-n:]表示从后截取的n个元素组成的字符串

print("string[-2:]:",string[-2:])#7.string[:-n]表示从后去掉n个元素后的字符串

print("string[:-2]:",string[:-2])#8.string[a:b]若a>b,默认输出空

print("string[3:2]:",string[3:2])#9.string[::n]表示从头到尾步长为n形成的字符串

print("string[::2]:",string[::2])#10.string[::-n]表示从尾到头步长为n形成的字符串

print("string[::-2]:",string[::-2])

输出:

前四个元素: abcd

第二个元素到第三个元素: bc

前三个元素: abc

第四个元素到最后一个元素: defg

所有的元素: abcdefg

string[-2:]: fg

string[:-2]: abcde

string[3:2]:

string[::2]: aceg

string[::-2]: geca

索引值以 0 为开始值,-1 为从末尾的开始位置。

1458874-20180814230238105-1569489655.png

操作符 ’ :‘ 代表了所以的意思。

怎么看截取的字符串?

一看数字:假如是正数就从开头数,假如是负数就从结尾数。

二看结构:包头不包尾。[a:b],包含下标为a的字符,但不包括下标为b的字符。

三看方向:我们需要看’:‘在什么地方,如果在左边就往左边走,在右边就往右边走。

比如:

string = 'abcdefg'

print("string[:2]:",string[:2])#一看数字,是正数2,则从开头数到下标2的位置,是字符’c‘;#二看结构,2在尾部,所以不包含字符’c‘;#三看方向,’:‘在左边,则往左走,所以截取的字符串为从下标为2的#字符’c‘且不包含’c‘开始,往左所有的字符:’ab‘

再有:

string = 'abcdefg'

print("string[-2:]:",string[-2:])#一看数字,是负数-2,则从结尾数到下标-2的位置,是字符’f‘;#二看结构,-2在头部,所以包含字符’f‘;#三看方向,’:‘在右边,则往右走,所以截取的字符串为从下标为-2的#字符’f‘且包含’f‘开始,往右所有的字符:’fg‘

字符串的操作

‘+’ :拼接两个字符串

’*‘ :复制字符串 >>>a='hello' >>>a*2 >>>’hellohello‘

[] :通过索引获取字符串中的字符

in :判断一个字符串是否包含在给定字符串当中

not in :与in相反

r/R :原始字符串 - 原始字符串: 原始字符串除在字符串的第一个引号前加上字母r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。

string1 = "helloworld"string2= "hello"string3= "world"string= string2 +string3print("拼接后的字符串:",string)print("string1*2:",string1*2)print("string1[1]:",string1[1])print("string2是否包含于string1:",string2 instring1)print("string3是否不包含于string1:",string3 not instring1)

original1= r"orig"original2= R"inal"

print("原始字符:",original1 + original2)

此实例输出:

拼接后的字符串: helloworld

string1*2: helloworldhelloworld

string1[1]: e

string2是否包含于string1: True

string3是否不包含于string1: False

原始字符: original

Python中字符格式化

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

符 号描述

%c

格式化字符及其ASCII码

%s

格式化字符串

%d

格式化整数

%u

格式化无符号整型

%o

格式化无符号八进制数

%x

格式化无符号十六进制数

%X

格式化无符号十六进制数(大写)

%f

格式化浮点数字,可指定小数点后的精度

%e

用科学计数法格式化浮点数

%E

作用同%e,用科学计数法格式化浮点数

%g

%f和%e的简写

%G

%f 和 %E 的简写

%p

用十六进制数格式化变量的地址

格式化操作符的辅助命令

Python2.6 开始,新增了一种格式化字符串的函数 str.format()方法,它增强了字符串格式化的功能,在本文将会讲到。

下面来演示格式化操作符的效果:

符号功能

.

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号( + )

在正数前面显示空格

#

在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')

0

显示的数字前面填充'0'而不是默认的空格

%

'%%'输出一个单一的'%'

(var)

映射变量(字典参数)

m.n.

m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

name = "kobe"age= 38points= 33643field_average= 24.9highest= 81

print('''\t%s是历史上最伟大的篮球运动员之一。\n他%6.d岁从NBA退役,场均可以拿到%-10.5f分,生涯总得分为%.5e,排名历史第三。\n其中一次与猛龙的比赛中拿到了其生涯最高分%010u分,写成八进制为%o分,写成十六进制为%#x分'''%(name,age,field_average,points,highest,highest,highest))

输出:

kobe是历史上最伟大的篮球运动员之一。

他 38岁从NBA退役,场均可以拿到24.90000 分,生涯总得分为3.36430e+04,排名历史第三。

其中一次与猛龙的比赛中拿到了其生涯最高分0000000081分,

写成八进制为121分,写成十六进制为0x51分

结果解释:

%s格式为字符串

%6.d格式为整数,且总长度为6个,用空格填补

%-10.5f格式为浮点数,且总长度为10,小数点后长度为5,' - '代表左对齐

%.5e代表使用科学计数法表示,且小数点后长度为5

%010u格式为无符号整数,且总长度为10,数字前用0填充而不是空格

%o格式为八进制表示;%#o用十六进制表示,且在十六进制数前显示’ox‘

关于上例的三引号作用解释’‘’ ‘’‘

python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。上例中之所以\n,\t可以起到作用,就是三引号的功能。三引号还可以起到注释的作用。

print("""三引号使[\n] ,以及[\t]等一些特殊字符发挥了作用""")'''这是三引号的多行注释'''

输出:

三引号使[

] ,以及[ ]等一些特殊字符发挥了作用

字符串的存储

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。

在Python3中,所有的字符串都是Unicode字符串。

python中字符串的内建函数

capitalize该方法返回一个首字母大写,且其他为小写的字符串。

str = 'hello world'

print(str.capitalize())#输出 Hello world

center(width,fillchar)width是字符串的总宽度,fillchar是填充字符。返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充。

ljust(width,fillchar)与center()方法不同的就是返回一个指定宽度width居左的字符串。

rjust(width,fillchar)与center()方法不同的就是返回一个指定宽度width居右的字符串。

str = "hello world"

print("str.ljust(20,'*'):",str.ljust(20,'*'))print("str.center(20,'*'):",str.center(20,'*'))print("str.rjust(20,'*'):",str.rjust(20,'*'))#fillchar只能是单字符。

str.ljust(20,'*'): hello world*********

str.center(20,'*'): ****hello world*****

str.rjust(20,'*'): *********hello world

lstrip(chars)截掉字符串左边的空格或指定字符串中的每个字符,返回截取后的字符串

rstrip(chars)截掉字符串右边的空格或者指定字符串的每个字符,返回截取后的字符串

strip(chars)同时实现lstrip()和rstrip()方法

str = 'hello world'

print(str.lstrip())print(str.lstrip('h'))print(str.lstrip('hew'))print(str.rstrip())print(str.rstrip('d'))print(str.rstrip('dlw'))print(str.strip(' hd'))

hello world

ello world

llo world

hello world

hello worl

hello wor

ello worl

count(sub,start,end)sub是搜索的子字符串,start是开始搜索的下标,end是结束的下标,返回子字符串在字符串中出现的次数。

str = "hello world hello world"sub= "hello"

print("‘hello’在字符串中出现了%d次"%(str.count(sub)))print("‘hello’在下标0~16中出现了%d次"%(str.count(sub,0,16)))print(str[0],str[16])#搜索的范围包括下标为start的字符,不包括下标为end的字符

‘hello’在字符串中出现了2次

‘hello’在下标0~16中出现了1次

h o

encode(encoding,errors)encode是编码,使用指定的编码格式编码字符串。encoding是指定使用什么编码方式。errors -- 设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeError。 其他可能得值有 'ignore', 'replace','xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。

str = '大大焕'str_utf8= str.encode("UTF-8",'strict')

str_gbk= str.encode("GBK",'strict')print("UTF-8编码:",str_utf8)print("GBK编码:",str_gbk)

UTF-8编码: b'\xe5\xa4\xa7\xe5\xa4\xa7\xe7\x84\x95'GBK编码: b'\xb4\xf3\xb4\xf3\xbb\xc0'

返回值:该方法返回的并不是一个普通的字符串,而是一个bytes对象。

bytes.decode(encoding,errors)参数encode是一样的,不过此方法是指定一种方法解码,而调用这个方法的是bytes对象,不是普通的字符串对象。

str = '大大焕'str_utf8= str.encode("UTF-8",'strict')

str_gbk= str.encode("GBK",'strict')print("UTF-8编码:",str_utf8)print("GBK编码:",str_gbk)print("UTF-8 解码:",str_utf8.decode('UTF-8','strict'))print("GBK解码:",str_gbk.decode('GBK','strict'))#如果我们试图用不对应的编码去解码,则会出现错误

str_utf8.decode('GBK','strict')

UTF-8编码: b'\xe5\xa4\xa7\xe5\xa4\xa7\xe7\x84\x95'GBK编码: b'\xb4\xf3\xb4\xf3\xbb\xc0'UTF-8解码: 大大焕

GBK解码: 大大焕

Traceback (most recent call last):

File"C:/Users/dell/PycharmProjects/Python_1/day10/firstPy.py", line 9, in str_utf8.decode('GBK','strict')

UnicodeDecodeError:'gbk' codec can't decode byte 0x95 in position 8: incomplete multibyte sequence

endswith(suffix,start,end)用于判断在下标为start~end的字符串中是否以字符串suffix结尾。返回true或者false。

str = 'hello wold'

print("是否以字符‘ld’结尾:",str.endswith("ld"))print("在下标2-7形成的字符串%s中,是否以‘ld’结尾:"%str[2:7],

str.endswith('ld',2,7))

是否以字符‘ld’结尾: True

在下标2-7形成的字符串llo w中,是否以‘ld’结尾: False

startswith(suffix,start,end) 用于判断在下标为start~end的字符串中是否以字符串suffix结尾。返回true或者false。

str = 'hello world'

print("是否以字符‘he’开头:",str.startswith("he"))print("在下标2-7形成的字符串%s中,是否以‘ld’开头:"%str[2:7],

str.startswith('ld',2,7))

是否以字符‘he’开头: True

在下标2-7形成的字符串llo w中,是否以‘ld’开头: False

expandtabs(tabsize)将字符串中的tab符号(\t)换为空格,空格的个数为tabsize。

str = 'hello\tworld'

print("原始字符串:"+str)#原始tabs长度默认为8个空格

print("使用空格替换\\t符号:"+str.expandtabs())print("使用16个空格替换\\t符号:"+str.expandtabs(16))

原始字符串:hello world

使用空格替换\t符号:hello world

使用16个空格替换\t符号:hello world

find(str,start,end)检测字符串中是否包含子字符串 str ,如果指定 start(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。

rfind(str,start,end)与find()一样,不过是从右边开始检索。

#find()

str = 'abcdefabcdab'

print("字符串‘ab’在str当中开始的索引为:",str.find('ab'))print("字符串‘ab’在str从下标3开始的字符串%s中开始的索引为:"%(str[3:]),str.find('ab',3))#将会返回第一个出现的字符串开始的索引

print("字符串‘ab’是否在str的下标1-6形成的字符串%s中:"%(str[1:6]),str.find('ab',1,6))#rfind()

print("str.rfind('ab'):",str.rfind('ab'))print("str.rfind('ab',1,6):",str.rfind('ab',1,6))

字符串‘ab’在str当中开始的索引为: 0

字符串‘ab’在str从下标3开始的字符串defabcdab中开始的索引为:6字符串‘ab’是否在str的下标1-6形成的字符串bcdef中: -1str.rfind('ab'): 10str.rfind('ab',1,6): -1

index(str,start,end)和find()方法一样,但是如果str不在调用的字符串中,会报一个异常。

rindex(str,start,end)和index方法一样,但是从后面开始检索。

str = 'abcdefabcdab'

print("字符串‘ab’是否在str的下标1-6形成的字符串中:",

str.index('ab',1,6))

Traceback (most recent call last):

File"C:/Users/dell/PycharmProjects/Python_1/day10/firstPy.py", line 2, in

print("字符串‘ab’是否在str的下标1-6形成的字符串中:",str.index('ab',1,6))

ValueError: substringnot found

isalnum()检测字符串是否由字母和数字组成。如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。

str = '#123abc'

print("str.isalnum():",str.isalnum()) #False

str1 = '123'

print("str1.isalnum():",str1.isalnum()) #True

str2 = 'abc'

print("str2.isalnum():",str2.isalnum()) #True

isalpha()如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False

isdigit()如果字符串只包含数字则返回 True 否则返回 False

str = '123abc'

print("str.isdigit():",str.isdigit()) #False

print("str.isalpha():",str.isalpha()) #False

str1 = 'abc'str2= '123'

print("str1.isalpha():",str1.isalpha()) #True

print("str2.isdigit():",str2.isdigit()) #True

str.isdigit(): False

str.isalpha(): False

str1.isalpha(): True

str2.isdigit(): True

isnumeric()与isidgit()的性质相差不多,不过它只针对unicode字符串。

isdecimal()也是判断字符串是否全部由数字构成。

ContractedBlock.gif

ExpandedBlockStart.gif

1 '''

2 isdigit()、isdecimal()、isnumeric()三者的区别。3

4 isdigit()5 True:Unicode字符串,byte数字6 False:罗马数字、中文数字7 error:无8

9 isdecimal()10 True:Unicode数字11 False:罗马数字、中文数字12 error:byte数字13

14 isnumeric()15 True:Unicode数字、罗马数字、中文汉字16 False:无17 error:byte数字18 '''

isdigit()、isdecimal()、isnumeric()三者的区别。

ContractedBlock.gif

ExpandedBlockStart.gif

1 str1 = '123' #unicode编码数字

2 str2 = b'123' #byte数字

3 str3 = '一二三' #中文数字

4 str4 = 'ⅠⅡⅢ' #罗马数字

5 print("str1.isdigit():",str1.isdigit())6 print("str2.isdigit():",str2.isdigit())7 print("str3.isdigit():",str3.isdigit())8 print("str4.isdigit():",str4.isdigit())9 print('\n')

测试isdigital()

ContractedBlock.gif

ExpandedBlockStart.gif

1 str1 = '123' #unicode编码数字

2 str2 = b'123' #byte数字

3 str3 = '一二三' #中文数字

4 str4 = 'ⅠⅡⅢ' #罗马数字

5 print('str1.isdecimal():',str1.isdecimal())6 print('str2.isdecimal():',str2.isdecimal())7 print('str3.isdecimal():',str3.isdecimal())8 print('str4.isdecimal():',str4.isdecimal())9 print('\n')

测试isdecimal()

ContractedBlock.gif

ExpandedBlockStart.gif

1 print('str1.isnumeric():',str1.isnumeric())2 print('str2.isnumeric():',str2.isnumeric())3 print('str3.isnumeric():',str3.isnumeric())4 print('str4.isnumeric():',str4.isnumeric())

测试isnumeric()

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

str = 'ABCabc'str1= 'abcabc'

print(str.islower()) #False

print(str1.islower()) #True

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

lower()将字符串的字母都转换为小写

upper()将字符串的字母都转换为大写

str = '你好,世界,hello WORLD'

print('变为小写:',str.lower())print('变为大写:',str.upper())

变为小写: 你好,世界,hello world

变为大写: 你好,世界,HELLO WORLD

casefold()也是将字符串的字母全变为小写,功能比lower()更强大。

str = 'heLLo WOrlD'

print(str.casefold())

hello world

isspace()如果字符串中只含有空白,返回True,否则返回False。

title()返回标题化的字符串,及所有单词都是首字母大写,其余小写。

istitle()判断字符串是否为标题化的

str = 'hello world'

print('str:%-15s是否已经标题化:'%(str),str.istitle())

str=str.title()print('str:%-15s是否已经标题化:'%(str),str.istitle())

str:hello world 是否已经标题化: False

str:Hello World 是否已经标题化: True

join(seq) 将序列中的元素以指定的字符连接生成一个新的字符串。返回通过指定字符连接序列中元素后生成的新字符串。

str1 = '-'str2= ''list1= 'hello world'list2= ['I','l','o','v','e','y','o','u']print(str1.join(list1))print(str1.join(list2))print(str2.join(list2))

h-e-l-l-o- -w-o-r-l-d

I-l-o-v-e-y-o-u

Iloveyou

输入的参数seq必须是字符串,不能是数字,否则会报错。

len(str) 返回字符串的长度

str = 'hello world'

print(len(str))11

translate(table,deletechars)table是翻译表通过maketrans()方法转换而来。deletechars是字符串中要过滤的字符列表。

inchars = 'eol' #被映射的字符串

outchars = '123' #映射的字符串

trans_table = str.maketrans(inchars,outchars) #制作映射翻译表

str = 'hello world'

print(str.translate(trans_table))#两个str意义是不一样的。第一个是表示str模块,第二个是变量名

'''如果要加上参数deletechars,则要将字符串对象都改为bytes对象

(在字符串前面加b)'''

#制作映射翻译表,将字符小写变成大写

bytes_trans_table = bytes.maketrans(b'abcdefghigklmnopqrstuvwxyz',

b'ABCDEFGHIGKLMNOPQRSTUVWXYZ')print(b'hello world'.translate(bytes_trans_table,b'ol'))#去掉原bytes对象中的字符‘o’和‘l’之后映射的字符串

h1332 w2r3d

b'HE WRD'

maketrans(intab,outtab)制作映射翻译表,,intab是要被替换的字符串,outtab是替换的字符串。返回一个映射的字典对象。此方法可以用bytes调用,也可以用str调用。

inchars = 'eol' #被映射的字符串

outchars = '123' #映射的字符串

trans_table = str.maketrans(inchars,outchars) #制作映射翻译表

print(trans_table,type(trans_table))

min(str)、max(str)返回字符串str中最小/大的字母

str = 'efghik'

print("str中最小的字母是%s,最大的字母是%s"%(min(str),max(str)))

输出:

str中最小的字母是e,最大的字母是k

replace(old,new,max)把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。

str = 'my name is kobe'str1= str.replace('kobe','james')print(str1)

str= 'abcabcabcabc'str1= str.replace('abc','123',3)print(str1)

my name isjames

123123123abc

split(str,num)通过指定分隔符(默认空格)对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串。str表示以什么分隔符进行切片,num表示切几次。返回一个由切割完的字符串形成的列表。

str = 'kobe is my favorite basketball player'

print(type(str.split()))print(str.split())print(str.split('i'))print(str.split('a',3))

['kobe', 'is', 'my', 'favorite', 'basketball', 'player']

['kobe', 's my favor', 'te basketball player']

['kobe is my f', 'vorite b', 'sketb', 'll player']

splitlines(keepends)在字符串中按照行(\n,\r,\r\n)分割返回一个包含各行的列表。参数keepends是判断符,默认为False,不包含换行符,若为True,则包含换行符

str = "\nabc\nefg\rhigoror\n"

print(str)print(str.splitlines())print(str.splitlines(True))

abc

higoror

['', 'abc', 'efg', 'higoror']

['\n', 'abc\n', 'efg\r', 'higoror\n']

swapcase()将字符串中大写变小写,小写变大写。

str = 'hello WORLD'

print(str.swapcase())

HELLO world

字符串的格式化format()方法

主要是使用{}与:来代替%的另一种格式化方法。

format可接受不限个参数,如果没有位置索引,则按先后顺序。format()中的参数全部可以视为一个列表或者元组。

>>> 'i am {},{} years old '.format('kobe',38)'i am kobe,38 years old '>>>'i am {},{} years old '.format('kobe',38,56)'i am kobe,38 years old '>>>'i am {},{} years old '.format('kobe')

Traceback (most recent call last):

File"", line 1, in

IndexError: tuple index out of range

>>>

{}可以比format()中的参数少,但不能多,多则会报错。

也可以使用索引来控制。

>>> 'i am {0},{1} years old '.format('kobe',38)

'i am kobe,38 years old '

>>> "i like {0},don't like {1},but my friends like {1}".format('basketball','football')

"i like basketball,don't like football,but my friends like football"

>>>

也可以设置对应参数

print('i am {name},{age} years old'.format(name = 'kobe',age = 39))#输出

i am kobe,39 years old

也可以通过字典设置

print('i am {name},{age} years old'.format(**{'name':'kobe','age' :39}))#输出

i am kobe,39 years old

也可以通过控制列表索引

print('i am {0},{1} years old'.format(*['kobe',39]))#输出

i am kobe,39 years old

*与**分别控制列表和字典,相当于将列表和字典的每个元素都变为format的参数。

如果不想使用*,也可以使用如下方法

list = ['kobe',39]print('i am {0[0]},{0[1]} years old'.format(list))#0不可少,表示索引为0的元素#输出

i am kobe,39 years old

也可以使用:改变格式,也是采用顺序赋值

demo = "i am {:s},age{:d}".format(*['kobe',39])print(demo)

demo= "i am {:s},age{:d}".format('kobe',39)print(demo)

demo= "numbers:{:b},{:o},{:d},{:x},{:X},{:%}".format(15,15,15,15,15,15.5432)print(demo)#o为八进制,b为二进制,x为16进制,X为16进制

输出:

i am kobe,age39

i am kobe,age39

numbers:1111,17,15,f,F,1554.320000%

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值