python字符串

字符串拼接

Python使用加号(+)作为字符串的拼接运算符,例如如下代码:

s2 = "Python "
s3 = "iS Funny"
#使用+拼接字符串
s4 = s2 + s3
print(s4)

字符串拼接数字

Python不允许直接拼接数字和字符串,程序必须先将数字转换成字符串。

为了将数字转换成字符串,可以使用str()repr()函数,例如如下代码:

s1 = "这是数字: "
p = 99.8
#字符串直接拼接数值,程序报错
print(s1 + p)
#使用str()将数值转换成字符串
print(s1 + str(p))
#使用repr()将数值转换成字符串
print(s1 + repr(p))

截取字符串

Python字符串直接在方括号([])中使用索引即可获取对应的字符,其基本语法格式为:

string[index]

这里的**string表示要截取的字符串,index**表示索引值。Python规定,字符串中第一个字符的索引为 0、第二个字符的索引为 1,后面各字符依此类推。此外,Python也允许从后面开始计算索引,最后一个字符的索引为 -1,倒数第二个字符的索引为 -2,依此类推。

s = 'crazyit.org is very good'
# 获取s中索引2处的字符
print(s[2]) # 输出a
# 获取s中从右边开始,索引4处的字符
print(s[-4]) # 输出g

Python可以在方括号中使用范围来获取字符串的中间“一段”(被称为子串),其基本语法格式为:

string[start : end : step]

此格式中,各参数的含义如下:

  • string:要截取的字符串;
  • start:表示要截取的第一个字符所在的索引(截取时包含该字符)。如果不指定,默认为 0,也就是从字符串的开头截取;
  • end:表示要截取的最后一个字符所在的索引(截取时不包含该字符)。如果不指定,默认为字符串的长度;
  • step:指的是从start索引处的字符开始,每step个距离获取一个字符,直至end索引出的字符。step默认值为 1,当省略该值时,最后一个冒号也可以省略。
s = 'crazyit.org is very good'
# 获取s中从索引3处到索引5处(不包含)的子串
print(s[3: 5]) # 输出 zy
# 获取s中从索引3处到倒数第5个字符的子串
print(s[3: -5]) # 输出 zyit.org is very
# 获取s中从倒数第6个字符到倒数第3个字符的子串
print(s[-6: -3]) # 输出 y g
#每隔 1 个,取一个字符
print(s[::2]) # 输出 caytogi eygo
# 获取s中从索引5处到结束的子串
print(s[5: ]) # 输出it.org is very good
# 获取s中从倒数第6个字符到结束的子串
print(s[-6: ]) # 输出y good
# 获取s中从开始到索引5处的子串
print(s[: 5]) # 输出crazy
# 获取s中从开始到倒数第6个字符的子串
print(s[: -6]) #输出crazyit.org is ver

len()函数详解:获取字符串长度或字节数

Python中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用len函数。

len函数的基本语法格式为:

len(string)

其中string用于指定要进行长度统计的字符串。

>>> a='http://c.biancheng.net'
>>> len(a)
22

通过使用encode()方法,将字符串进行编码后再获取它的字节数。

>>> str1 = "人生苦短,我用Python"
>>> len(str1.encode())
27

因为汉字加中文标点符号共7个,占21个字节,而英文字母和英文的标点符号占6个字节,一共占用27个字节。

split()方法详解:分割字符串

**split()方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。**该方法的基本语法格式如下:

str.split(sep,maxsplit)

此方法中各部分参数的含义分别是:

  1. str:表示要进行分割的字符串;
  2. sep:用于指定分隔符,可以包含多个字符。此参数默认为None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等。
  3. maxsplit:可选参数,用于指定分割的次数,最后列表中子串的个数最多为maxsplit+1。如果不指定或者指定为 -1,则表示分割次数没有限制。
>>> str = "C语言中文网 >>> c.biancheng.net"
>>> str
'C语言中文网 >>> c.biancheng.net'
>>> list1 = str.split() #采用默认分隔符进行分割
>>> list1
['C语言中文网', '>>>', 'c.biancheng.net']
>>> list2 = str.split('>>>') #采用多个字符进行分割
>>> list2
['C语言中文网 ', ' c.biancheng.net']
>>> list3 = str.split('.') #采用 . 号进行分割
>>> list3
['C语言中文网 >>> c', 'biancheng', 'net']
>>> list4 = str.split(' ',4) #采用空格进行分割,并规定最多只能分割成 4 个子串
>>> list4
['C语言中文网', '>>>', 'c.biancheng.net']
>>> list5 = str.split('>') #采用 > 字符进行分割
>>> list5
['C语言中文网 ', '', '', ' c.biancheng.net']
>>>
# 当字符串中有连续的空格或其他空字符时,都会被视为一个分隔符对字符串进行分割
>>> str = "C语言中文网   >>>   c.biancheng.net"  #包含 3 个连续的空格
>>> list6 = str.split()
>>> list6
['C语言中文网', '>>>', 'c.biancheng.net']
>>>

join()方法:合并字符串

join()方法合并字符串时,它会将列表(或元组)中多个字符串采用固定的分隔符连接在一起。

join()方法的语法格式如下:

newstr = str.join(iterable)

此方法中各参数的含义如下:

  1. newstr:表示合并后生成的新字符串;
  2. str:用于指定合并时的分隔符;
  3. iterable:做合并操作的源字符串数据,允许以列表、元组等形式提供。
>>> list = ['c','biancheng','net']
>>> '.'.join(list)
'c.biancheng.net'
>>> dir = '','usr','bin','env'
>>> type(dir)
<class 'tuple'>
>>> '/'.join(dir)
'/usr/bin/env'

count()方法:统计字符串出现的次数

count方法用于检索指定字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回 0,否则返回出现的次数。

count方法的语法格式如下:

str.count(sub[,start[,end]])

此方法中,各参数的具体含义如下:

  1. str:表示原字符串;
  2. sub:表示要检索的字符串;
  3. start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;
  4. end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。
>>> str = "c.biancheng.net"
>>> str.count('.')
2
>>> str = "c.biancheng.net"
>>> str.count('.',1)
2
>>> str.count('.',2)
1

find()方法:检测字符串中是否包含某子串

find()方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。

find()方法的语法格式如下:

str.find(sub[,start[,end]])

此格式中各参数的含义如下:

  1. str:表示原字符串;
  2. sub:表示要检索的目标字符串;
  3. start:表示开始检索的起始位置。如果不指定,则默认从头开始检索;
  4. end:表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。
>>> str = "c.biancheng.net"
>>> str.find('.')
1
>>> str = "c.biancheng.net"
>>> str.find('.',2)
11
>>> str = "c.biancheng.net"
>>> str.find('.',2,-4)
-1

index()方法:检测字符串中是否包含某子串

index()方法也可以用于检索是否包含指定的字符串, 同 find() 方法相比,不同之处在于,当指定的字符串不存在时,index()方法会抛出异常。

index()方法的语法格式如下:

str.index(sub[,start[,end]])

此格式中各参数的含义分别是:

  1. str:表示原字符串;
  2. sub:表示要检索的子字符串;
  3. start:表示检索开始的起始位置,如果不指定,默认从头开始检索;
  4. end:表示检索的结束位置,如果不指定,默认一直检索到结尾。
>>> str = "c.biancheng.net"
>>> str.index('.')
1
>>> str = "c.biancheng.net"
>>> str.index('z')
Traceback (most recent call last):
  File "<pyshell#49>", line 1, in <module>
    str.index('z')
ValueError: substring not found

字符串对齐方法

ljust()方法

ljust()方法的功能是向指定字符串的右侧填充指定字符,从而达到左对齐文本的目的。

ljust()方法的基本格式如下:

S.ljust(width[, fillchar])

其中各个参数的含义如下:

  • S:表示要进行填充的字符串;
  • width:表示包括S本身长度在内,字符串要占的总长度;
  • fillchar:作为可选参数,用来指定填充字符串时所用的字符,默认情况使用空格。
S = 'http://c.biancheng.net/python/'
addr = 'http://c.biancheng.net'
print(S.ljust(35))
print(addr.ljust(35))
print(S.ljust(35,'-'))
print(addr.ljust(35,'-'))

输出结果为:

http://c.biancheng.net/python/  # 该输出结果中除了明显可见的网址字符串外,其后还有空格字符存在,每行一共 35 个字符长度。
http://c.biancheng.net
http://c.biancheng.net/python/-----
http://c.biancheng.net-------------

rjust()方法

rjust()ljust()方法类似,唯一的不同在于,rjust()方法是向字符串的左侧填充指定字符,从而达到右对齐文本的目的。

rjust()方法的基本格式如下:

S.rjust(width[, fillchar])

每行字符串都占用 35 个字节的位置,实现了整体的右对齐效果。

S = 'http://c.biancheng.net/python/'
addr = 'http://c.biancheng.net'
print(S.rjust(35))
print(addr.rjust(35))
print(S.rjust(35,'-'))
print(addr.rjust(35,'-'))

输出结果为:

     http://c.biancheng.net/python/
             http://c.biancheng.net
-----http://c.biancheng.net/python/
-------------http://c.biancheng.net

center()方法

center()字符串方法与ljust()rjust()的用法类似,但它让文本居中,而不是左对齐或右对齐。

center()方法的基本格式如下:

S.center(width[, fillchar])

【例 5】

S = 'http://c.biancheng.net/python/'
addr = 'http://c.biancheng.net'
print(S.center(35,))
print(addr.center(35,))
print(S.center(35,'-'))
print(addr.center(35,'-'))

输出结果为:

   http://c.biancheng.net/python/
       http://c.biancheng.net
---http://c.biancheng.net/python/--
-------http://c.biancheng.net------

检查字符串开头结尾

startswith()方法

startswith()方法用于检索字符串是否以指定字符串开头,如果是返回True;反之返回False。此方法的语法格式如下:

str.startswith(sub[,start[,end]])

此格式中各个参数的具体含义如下:

  1. str:表示原字符串;
  2. sub:要检索的子串;
  3. start:指定检索开始的起始位置索引,如果不指定,则默认从头开始检索;
  4. end:指定检索的结束位置索引,如果不指定,则默认一直检索在结束。
>>> str = "c.biancheng.net"
>>> str.startswith("c")
True
>>> str = "c.biancheng.net"
>>> str.startswith("http")
False
>>> str = "c.biancheng.net"
>>> str.startswith("b",2)
True

endswith()方法

endswith()方法用于检索字符串是否以指定字符串结尾,如果是则返回True;反之则返回False。该方法的语法格式如下:

str.endswith(sub[,start[,end]])

此格式中各参数的含义如下:

  1. str:表示原字符串;
  2. sub:表示要检索的字符串;
  3. start:指定检索开始时的起始位置索引(字符串第一个字符对应的索引值为 0),如果不指定,默认从头开始检索。
  4. end:指定检索的结束位置索引,如果不指定,默认一直检索到结束。
>>> str = "c.biancheng.net"
>>> str.endswith("net")
True

字符串大小写转换

title()方法

title()方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要被转换的字符,此方法会将字符串原封不动地返回。

title()方法的语法格式如下:

str.title()

其中,str表示要进行转换的字符串。

>>> str = "c.biancheng.net"
>>> str.title()
'C.Biancheng.Net'
>>> str = "I LIKE C"
>>> str.title()
'I Like C'

lower()方法

**lower()方法用于将字符串中的所有大写字母转换为小写字母,转换完成后,该方法会返回新得到的字符串。**如果字符串中原本就都是小写字母,则该方法会返回原字符串。

lower()方法的语法格式如下:

str.lower()

其中,str表示要进行转换的字符串。

>>> str = "I LIKE C"
>>> str.lower()
'i like c'

upper()方法

upper()的功能用于将字符串中的所有小写字母转换为大写字母,和以上两种方法的返回方式相同,即如果转换成功,则返回新字符串;反之,则返回原字符串。

upper()方法的语法格式如下:

str.upper()

其中,str表示要进行转换的字符串。

>>> str = "i like C"
>>> str.upper()
'I LIKE C'

去除字符串中空格

Python 中,字符串变量提供了3种方法来删除字符串中多余的空格和特殊字符,它们分别是:

  1. strip():删除字符串前后(左右两侧)的空格或特殊字符。
  2. lstrip():删除字符串前面(左边)的空格或特殊字符。
  3. rstrip():删除字符串后面(右边)的空格或特殊字符。

注意,Pythonstr是不可变的(不可变的意思是指,字符串一旦形成,它所包含的字符序列就不能发生任何改变),因此这三个方法只是返回字符串前面或后面空白被删除之后的副本,并不会改变字符串本身。

strip()方法

strip()方法用于删除字符串左右两个的空格和特殊字符,该方法的语法格式为:

str.strip([chars])

其中,str表示原字符串,[chars]用来指定要删除的字符,可以同时指定多个,如果不手动指定,则默认会删除空格以及制表符、回车符、换行符等特殊字符。

>>> str = "  c.biancheng.net \t\n\r"
>>> str.strip()
'c.biancheng.net'
>>> str.strip(" ,\r")
'c.biancheng.net \t\n'
>>> str       # 通过 strip() 确实能够删除字符串左右两侧的空格和特殊字符,但并没有真正改变字符串本身。
'  c.biancheng.net \t\n\r'

lstrip()方法

lstrip()方法用于去掉字符串左右的空格和特殊字符。该方法的语法格式如下:

str.lstrip([chars])

其中,strchars参数的含义,分别同strip()语法格式中的strchars完全相同。

>>> str = "  c.biancheng.net \t\n\r"
>>> str.lstrip()
'c.biancheng.net \t\n\r'

rstrip()方法

rstrip()方法用于删除字符串右侧的空格和特殊字符,其语法格式为:

str.rstrip([chars])

strchars参数的含义和前面 2 种方法语法格式中的参数完全相同。

>>> str = "  c.biancheng.net \t\n\r"
>>> str.rstrip()
'  c.biancheng.net'

格式化输出

占位符%格式化输出

输出标准

  1. %:表示格式说明的起始符号,不能省略
  2. ``:有-b表示左对其输出,右边补空格,如省略表示右对齐,左边补空格
  3. 0:有0表示指定空格填0,如省略指定空格不填。
  4. m.n:·m·指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实形数小数点位。未指定n,浮点型默认精度为n = 6

格式符用以指定输出项的数据类型和输出格式

  1. 整数%d格式:用来输出十进制整数。有以下用法:
    • %d:按整形数据的实际长度输出
    • %mdm为指定的输出字段的宽度。如果m>实际数据位数,左端补空格,如果m<实际数据位数,则按实际位数输出。
a=1000

print("a : %d; b : %10d" % (a, a))  # 输出:a : 1000; b :       1000
  1. 字符串%s格式:用来输出一个字符串
    • %s:输出整个字符串
    • %ms:输出的字符串占m列,如果字符串本身长度大于m,则全部输出,如果小于m,则左边补空格
    • %-ms:如果串长小于m,则在m的范围内,字符串向左靠,右补空格
    • %m.ns:输出占m列,但是只取字符串左端n个字符。这n个字符输出在m列的右侧,左边补空格。如果n > m,自动取n值,保证n个字符正常输出。
    • %-m.nsm,n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n > m,自动取n值,保证n个字符正常输出。
a=1000
b="hellworld"

print('a : %d; b : %10d' % (a, a))     # 输出:a : 1000; b :       1000
print("str1:%s;" % (b))					# 输出:str1:hellworld;
print("str2:%12s; str3:%5s" % (b, b))		# 输出:str2:   hellworld; str3:hellworld;
print("str4:%-12s; str5:%-5s" % (b, b))		# 输出:str4:hellworld   ; str5:hellworld;
print("str6:%5.8s; str7:%5.3s" % (b, b))	# 输出:str6:hellworl; str7:  hel;
print("str8:%-5.8s; str9:%-5.3s" % (b, b))	# 输出:str8:hellworl; str9:hel  ;
  1. 浮点型%f格式: 用来输出一个浮点型数值
    • %f:不指定宽度,整数部分全部输出,并输出6个小数位。
    • %m.nf:输出共占m列,其中有n个小数,若输出数值(即n+整数部分+小数点1)宽度小于m左侧补空格。
    • %-m.nf:输出共占m列,其中有n位小数,若输出数值宽度(即n+整数部分+小数点1)小于m右端补空格。
c=1314.1415926
print("float1:%f" % (c))		# 输出:float1:1314.141593
print("float2:%8.2f; float3:%8.5f;" % (c, c))	# 输出:float2: 1314.14; float3:1314.14159;
print("float4:%-8.2f; float5:%-8.5f;" % (c, c))	# 输出:float4:1314.14 ; float5:1314.14159;

format()格式化输出

基本格式

把传统的%替换为{}来实现格式化输出 。format()方法的语法格式如下:

str.format(args)

此方法中,str用于指定字符串的显示样式;args用于指定要进行格式转换的项,如果有多项,之间有逗号进行分割。

在创建str显示样式模板时,需要使用{}来指定占位符,其完整的语法格式为:

{ [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ] }

注意,格式中用 [] 括起来的参数都是可选参数,即可以使用,也可以不使用。各个参数的含义如下:

  • index:指定:后边设置的格式要作用到args中第几个数据,数据的索引值从 0 开始。如果省略此选项,则会根据args中数据的先后顺序自动分配。

  • fill:指定空白处填充的字符。注意,当填充字符为逗号(,)且作用于整数或浮点数时,该整数(或浮点数)会以逗号分隔的形式输出,例如(1000000会输出 1,000,000)。

  • align:指定数据的对齐方式,具体的对齐方式如表 1 所示。

    align含义
    <数据左对齐。
    >数据右对齐。
    =数据右对齐,同时将符号放置在填充内容的最左侧,该选项只对数字类型有效。
    ^数据居中,此选项需和width参数一起使用。
  • sign:指定有无符号数,此参数的值以及对应的含义如表 2 所示。

    sign参数含义
    +正数前加正号,负数前加负号。
    -正数前不加正号,负数前加负号。
    空格正数前加空格,负数前加负号。
    #对于二进制数、八进制数和十六进制数,使用此参数,各进制数前会分别显示0b、0o、0x前缀;反之则不显示前缀。
  • width:指定输出数据时所占的宽度。

  • .precision:指定保留的小数位数。

  • type:指定输出数据的具体类型,如表 3 所示。

    type类型值含义
    s对字符串类型格式化。
    d十进制整数。
    c将十进制整数自动转换成对应的Unicode字符。
    e或者E转换成科学计数法后,再格式化输出。
    g或G自动在e和f(或E和F)中切换。
    b将十进制数自动转换成二进制表示,再格式化输出。
    o将十进制数自动转换成八进制表示,再格式化输出。
    x或者X将十进制数自动转换成十六进制表示,再格式化输出。
    f或者F转换为浮点数(默认小数点后保留 6 位),再格式化输出。
    %显示百分比(默认显示小数点后 6 位)。

代码示例

基本用法

print('{} {}'.format('hello', 'world'))  # 最基本的

print('{0} {1}'.format('hello', 'world'))  # 通过位置参数

print('{0} {1} {0}'.format('hello', 'world'))  # 单个参数多次输出

"""输出结果
hello world
hello world
hello world hello
"""

关键词定位

# 通过关键词参数
print('我的名字是{name},我今年{age}岁了。'.format(name='Linda', age='18'))

# 与位置参数一样,单个参数也能多次输出
print('{name}说:"我的名字是{name},我今年{age}岁了。"'.format(name='linda', age='18'))

"""输出结果
我的名字是linda,我今年18岁了。
linda说:"我的名字是Linda,我今年18岁了。"
"""

固定宽度/填充/对齐方式

data = [{'name': 'Mary', 'college': 'Tsinghua University'},
        {'name': 'Micheal', 'college': 'Harvard University'},
        {'name': 'James', 'college': 'Massachusetts Institute of Technology'}]

print('{:-^50}'.format('居中'))
for item in data:
    print('{:^10}{:^40}'.format(item['name'], item['college']))

print('{:-^50}'.format('左对齐'))
for item in data:
    print('{:<10}{:<40}'.format(item['name'], item['college']))

print('{:-^50}'.format('右对齐'))
for item in data:
    print('{:>10}{:>40}'.format(item['name'], item['college']))

"""输出结果
------------------------居中------------------------
   Mary             Tsinghua University
 Micheal             Harvard University
  James    Massachusetts Institute of Technology
-----------------------左对齐------------------------
Mary      Tsinghua University
Micheal   Harvard University
James     Massachusetts Institute of Technology
-----------------------右对齐------------------------
      Mary                     Tsinghua University
   Micheal                      Harvard University
     James   Massachusetts Institute of Technology
"""

数字格式化

# 取小数点后两位
num = 3.1415926
print('小数点后两位:{:.2f}'.format(num))  # 输出结果 -> 小数点后两位:3.14

# 带+/-输出
num = -3.1415926
print('带正/负符号:{:+.2f}'.format(num))  # 输出结果 -> 带正/负符号:-3.14

# 转为百分比
num = 0.34534
print('百分比:{:.2%}'.format(num))  # 输出结果 -> 百分比:34.53%

# 科学计数法
num = 12305800000
print('科学计数法:{:.2e}'.format(num))  # 输出结果 -> 科学计数法:1.23e+10

# ,分隔
num = 12305800000
print('","分隔:{:,}'.format(num))  # 输出结果 -> ","分隔:12,305,800,000

# 转为二进制
num = 15
print('二进制:{:b}'.format(num))  # 输出结果 -> 二进制:1111

# 十六进制
num = 15
print('十六进制:{:x}'.format(num))  # 输出结果 -> 十六进制:f

# 八进制
num = 15
print('八进制:{:o}'.format(num))  # 输出结果 -> 八进制:17
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星*湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值