Python字符串及其操作---索引、合并、拆分、格式化

2021-01-11 10:15:00 浏览数 (1)

参考链接: Python中有关字符串的有趣事实 2(Slicing切片)

Python字符串及其操作

 1.概述2.通用序列操作2.1索引2.2 切片2.3 字符串合并2.4 乘法2.5 成员资格2.6 长度、最小值和最大值

  3 字符串格式化3.1 字符串格式化3.2 字符串的转义字符

  3 字符串函数(方法)3.1 测试函数3.2 字符串查找函数3.3 字符串替换函数3.4 字符串合并3.5 拆分函数3.6 字符串与日期的转换

1.概述 

在Python中,字符串是除数字外最重要的数据类型。字符串无处不在:将字符串输出到屏幕上;从用户的键盘输入读取字符串;文件通常被视为大型字符串;网页大部分是由文本组成的。字符串是一种聚合数据结构,可充分利用索引和切片—用于从字符串中提取子串。而Python正则表达式库,是一种用来处理字符串的微型语言,但功能强大。 

2.通用序列操作 

Python中,字符串、列表和元组都属于序列。序列有一些通用的操作。包括:索引(indexing)、切片(slicing)、加(adding)、乘(multiplying)、检查某个元素是否属于序列的成员(成员资格)、计算序列长度、找出最大元素和最小元素等。 

2.1索引 

序列中的所有元素都是有编号的—从0开始递增。这些元素可以通过编号分别访问。索引有正索引和负索引,可根据实际情况选用。字符串就是一个由字符组成的序列,处理字符串时,经常需要访问其中的各个字符。索引0指向第1个字符。 

例如:字符串’apple’的正索引和负索引  

s = 'apple'

#索引

s[0]

for i in s:

    print(i,end=" ")

for i in range(len(s)):

    print(s[-(i 1)],end="") #反转列表,用索引

for i in reversed(s): #反转列表 用函数

    print(i,end="")

2.2 切片 

与使用索引访问单个元素类似,可以使用分片操作来访问一定范围内的元素。分片是实际应用中经常使用的技术,被截取的部分称为“子串”Python 3支持的分片格式为:S[i:j:k] 表示:索引S对象中的元素,从索引为i直到索引为j-1,每隔k个元素索引一次,第三个限制k为步长,默认为1,也可以使用负数作为步长,步长-1表示分片将会从右至左进行而不是通常的从左至右,实际效果主是将序列反转。在Python中,还可以使用split()函数来截取字符串。 

#切片索引,类似列表

food = "apple pie"

food[0:5]

food[0:5:2]

food[::2]

food[1::2]

food[::-1] #反转字符串 还可以用函数 reversed(s)

#一个应用

def get_ext(fname):

    """

    返回文件的扩展名

    """

    dot = fname.rfind(".") #获得.的索引(从右边开始找)

    if dot == -1:

        return ''

    else:

        return fname[(dot 1):]

get_ext("apple.avi")

2.3 字符串合并 

这一节参考了博客. Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 os.path.join(): 将多个路径组合后返回 

 join()函数 语法: ‘sep’.join(seq) 参数说明 sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典 上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串 返回值:返回一个以分隔符sep连接各个元素后生成的字符串.  os.path.join()函数 语法: os.path.join(path1[,path2[,…]]) 返回值:将多个路径组合后返回 注:第一个绝对路径之前的参数将被忽略.  

#字符串拼接,合并

str1 = "Hello, ";str2 = "LL!"

str1 str2

#'Hello, LL!'

#对列表进行操作(分别使用' '与':'作为分隔符)

seq1 = ['hello','beautiful','gril','ll']

print (' '.join(seq1))

#hello good boy doiido

print (':'.join(seq1))

#hello:good:boy:doiido

#对字符串进行操作

seq2 = "hello beautiful gril ll"

print (':'.join(seq2))

#h:e:l:l:o: :b:e:a:u:t:i:f:u:l: :g:r:i:l: :l:l

#对元组进行操作

seq3 = ('hello','beautiful','gril','ll')

print(':'.join(seq3))

#hello:beautiful:gril:ll

#对字典进行操作,实际上是对字典的键进行操作

seq4 = {'hello':1,'beautiful':2,'gril':3,'ll':4}

print ('-'.join(seq4))

#hello-beautiful-gril-ll

#合并目录

import os

os.path.join('/hello/','deer/gril/','ll')

#'/hello/deer/gril/ll'

2.4 乘法 

用数字x乘以一个序列会生成新的序列,在新的序列中,原来的序列被重复x次。 

str1 = "love you!"

str1*3  #'love you!love you!love you!'

li = ['I','love','you']

li*3 #列表长度扩展为9.

tup = ('I','love','you')

tup*3 #元组长度扩展为9.

dict1 = {'I':5,"love":2,'you':0}

dict1*3 #注意字典不是序列,不能乘。

2.5 成员资格 

为了检查一个值是否在序列中,可以使用in运算符。该运算符检查某个条件是否为真,若为真返回True,否则返回False。 

#成员资格 in 

s = "你怎么那么好看?"

"你" in s 

"我" in s

li = list(s)

"你" in li 

"我" in li

tup = tuple(s)

"你" in tup

"我" in tup

2.6 长度、最小值和最大值 

len、min和max都是内置函数。 

len—返回序列中包含的元素个数。min—返回序列中的最小值。max—返回序列中的最大值。 

3 字符串格式化 

3.1 字符串格式化 

C语言使用函数printf()格式化输出结果,Python也提供了类似功能。 Python将若干值插入带有“%”标记的字符串中,从而可以按照指定格式输出字符串。 语法: “%s” % str1 “%s %s” % (str1, str2) 

Python格式化字符串的替代符及含义: 符号、对齐和用0填充 在字段宽度和精度之间还可以放置一个“标志”,该标志可以是零、加号、减号或空格。零表示数字将会用0填充。 

#字符串格式化

s = 'Version'

n = 1.0

print("%s" %s)          # %s 字符串

print("%s %d" %(s,n))   # %d 整型

print("%s %.1f" %(s,n)) # %f 浮点型

'''

输出:

Version

Version 1

Version 1.0

'''

#带精度的格式化 

n = 3.1415926

print("%f" %n) #3.141593 直接输出

print("%.2f" %n) #3.14  保留2位小数

print("%.3f" %n) #3.142 保留3位小数

from math import pi

print('0.2f' %pi) #表示字段宽度为10(包括小数点),精度为2,空位用0填充。

print('%-10.2f' %pi)

print('.2f' %pi) #用(-)号来左对齐数值。

print(('% 5d' ) 'n' ('% 5d' %-110)) #( )号标示出 符号

'''

0000003.14

3.14      

      3.14

  10

 -110

'''

3.2 字符串的转义字符 

计算机中存在可见字符与不可见字符。可见字符指键盘上的字母、数字和符号。不可见字符是指换行、回车、制表符等字符。对于不可见字符,Python使用的方法类似于C语言,都是使用“”作为转义字符。Python还提供了函数strip()、lstrip()、rstrip()去除字符串中的转义字符。  

#转义字符的应用

print("' and " are quotes")

print("\ must be written \\") #"\\",第1,3反斜线表示转义字符。

print("onentwonthree")

print("hellotworldn")

print(r"hellotworldn") #加个r,可以忽略转义字符的作用,直接输出原始内容。

print(len("\")) #计算字符长度时,不包括转义字符""

print(len("anbnc"))

'''

输出:

' and " are quotes

must be written \

one

two

three

hello   world

hellotworldn

1

5

'''

3 字符串函数(方法) 

Python字符串自带了大量很有用的函数,要查看这些函数,可调用dir并将参数指定为任何字符串(如:dir(’ '))。虽无必要准确记住所有函数功能,但最好有个大致了解,这样有益于需要时去查询具体使用。字符串函数的详细介绍可参阅其文档字符串或Python在线文档 此处介绍常用的字符串函数。 

3.1 测试函数 

用于检测字符串是否为特定格式的函数,它们组成了一个最大的字符串函数组。 测试函数都返回True或False,因此也称为布尔函数或谓词。  

s = 'abcdefg hhh'

#字符串测试函数 startswith endswith.....

s.startswith("b") #是否以"b"开头

s.startswith("abc")

s.isupper()

3.2 字符串查找函数 

说明:函数index和find之间的差别在于没有找到指定子串的情形。函数index引发异常ValueError,而函数find将返回-1。 

#查找函数应用

str1 = "I love you"

print(str1.find("o"))  

print(str1.rfind("o"))

print(str1.index("o"))

print(str1.rindex("o"))

print(str1.find("dog"))

print(str1.index("dog"))

'''

3

8

3

8

-1

Traceback (most recent call last):

  File "<ipython-input-156-d1f8ccf2fe06>", line 6, in <module>

    print(str1.index("dog"))

ValueError: substring not found

'''

3.3 字符串替换函数 

Python字符串自带了两个替换函数,如下表所示 注意:使用替换函数可轻松地删除字符串中的子串。 

#字符串替换

s = "up, up and away"

s1 = "up,tuptandtaway"

print(s)

print(s.replace("up", "down"))

print(s.replace('up','')) #直接删掉了'up'

print(s1)

print(s1.expandtabs(8))

print(s1.expandtabs(10))

3.4 字符串合并 

Python可使用“ ”连接不同的字符串。除此之外,还可以使用join函数(是split方法的逆方法)和reduce函数实现字符串的合并。 join函数的举例见2.3节。 使用reduce函数连接字符串 

from functools import reduce

import operator

strs = ["Hello","world","hello","China!"]

operator.add(1,2) #加法1 2

reduce(operator.add, [1,2,3,4,5]) #(((1 2) 3) 4) 5

#用reduce实现对空字符串”的累计连接,每次连接列表strs中的一个元素

res = reduce(operator.add,strs,"") 

print(res)

3.5 拆分函数 

拆分函数将字符串拆分成多个子串。如下表所示。  

#例6-13:拆分字符串

url='www.google.com'

print(url.partition('.'))

print(url.rpartition('.'))

print(url.split('.'))

story='A long time ago, a princess ate an apple.'

print(story.split()) #默认以空格分隔

'''

('www', '.', 'google.com')

('www.google', '.', 'com')

['www', 'google', 'com']

['A', 'long', 'time', 'ago,', 'a', 'princess', 'ate', 'an', 'apple.']

'''

#例6-14:调用split()截取子串

sentence="Bob said: 1, 2, 3, 4, 5"

#根据空格获取子串,原串中含6个空格,返回7个子串

print(sentence.split()) 

#根据逗号取子串,原串中含4个逗号,返回5个子串

print(sentence.split(","))

#根据逗号个数分割字符串,将原串分割为4个子串

print(sentence.split(",",3))

print(sentence.split(",",2))

print(sentence.split(",",1))

'''

3.6 字符串与日期的转换 

在实际应用中,经常需要将日期类型与字符串类型互相转换。Python提供了time模块处理日期和时间。函数strftime()可以实现从时间到字符串的转换。字符串到时间的转换要进行两次转换,需要使用time模块和datetime类。 。。。 

参考资料:liyumei老师的课件.

0 人点赞