大数据学习大数据学习分享Python爬虫v

Python|字符串str的构造、操作(操作符、函数、方法)

2018-05-10  本文已影响59人  Python教学

字符串是一种“元素受限"的序列,序列中的元素是单个字符。

字符串使用一对单引号''或一对双引号“”或一对三引号'''''''(或"""""")的定界符(delimiter)去界定一个字符串,并且不同的定界符可以相互嵌套。单引号或双引号界定字符串时作用是一样的,但要配对,三引用可以使用三个单引号或三个双引号,也要配对,可以定义一个多行字符串。

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

字符除了支持使用加号连接字符串以外,还提供了大量的运算符、对象方法、标准函数支持查找、替换、排版等操作。学习资料也可以加下Python扣扣裙:四八三五四六四一六自己下载学习下

1 字符串的构造

1.1 按定义描述直接生成

1.2 使用类型转换str()生成

1.3 使用join方法连接列表元素

2 字符扫描(遍历)

也就是遍历字符串的全部字符,一边遍历一边处理。

3 字符编码和字符串比较

字符串的基础是字符。Python语言规定的字符集是国际语言字符集Unicode,这也规定了所有可用字符的编码,每个字符对应一个唯一的编码。在计算机的存储或传输中,字符也用二进制位串表示,每个字符对应一个二进制位串,而每个二进制位串对应着一个整数。人们称这个整数是字符的编码。

标准内置函数ord(c)返回字符c对应编码(unicode的整数编码);

标准内置函数chr(n)返回整数n对应的字符:

字符串的比较基于字符串的每个字符的编码。

除了用in和not in以外,还可以使用==、!=、<、<=、>、>=等比较运算符,得到一个逻辑值。

Unicode是一个符号集,它规定了符号的二进制代码,却没有规定二进制代码如何储存。

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码(根据不同的符号而变化字节长度),又称万国码。

UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。UTF-8 是 Unicode 的实现方式之一。

UTF-8 的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。

2)对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。

4 字符串类别判断

对象方法符合返回“True”的情况

s.isupper()s不空且其中所有存在大小写的字符都是大写

s.islower()s不空且其中所有存在大小写的字符都是小写

s.isdigit()s不空且其中所有字符都是数字

s.isalpha()s不空且其中所有字符都是字母

s.isidentifier()s不空且其形式可以作为标识符

s.isspace()s不空且其中全是空白字符(空格、制表符、换行符)

5 字符串大小写转换

对象方法说明

s.lower()拷贝后大写的字母变成小写

s.upper()拷贝后小写的字母变成大写

s.capitalize()拷贝后首字符大小、其余小写

s.swapcase()拷贝后大小写调换

6 字符串查找、替换、统计和空白字符控制

对象方法说明

s.find(sub)查找并返回字符串sub在s里首次出现的位置,如果没有,返回-1

s.find(sub,start,end)查找并返回字符串sub在s的指定区间里首次出现的位置,如果没有,返回-1

s.count(sub)统计sub在s里互不重叠的出现的次数

s.count(sub,start,end)统计sub在s的指定区间里互不重叠的出现的次数

s.replace(old,new)拷贝后把s里的old替换为new

s.replace(old,new,count)拷贝后把s里的old替换为new,只做前count次替换

s.strip()拷贝后删去s两端的空白字符(如果有)

s.strip(chars)拷贝后删去s两端的与chars相同的字符(如果有)

s.lstrip([chars])同上,仅限左端操作

s.rstrip([chars])同上,仅限右端操作

7 字符串和表相互转换

7.1 字符串分割,得到一个列表

s.split([sep],[max])

sep是用于切分的子串。默认是连续空白字符段(空格/换行/制表符)

max用于指定(从左向右处理时)最大切分项数,切分出指定项数后剩下的串作为结果表里的最后一个子串。

切分时会丢掉s开头和结尾的空白字符。

如果想从右边开始切分,可以使用s.rsplit()方法

如果想按行切割,可以使用s.splitlines([keepends])

可选参数keepends用于指定是否保留每行最后的换行符。

7.2 列表元素连接,得到一个字符串

切割的逆操作是连接,使用sep.join(list1)方法

sep用于指定连接使用的分隔符。

8 字符串与数字的转换

各种数值类型和字符串可以相互转换:

9 字符串格式化

字符串格式化是指适当地加一些空格或其它字符等形式对字符串的处理,当然也是生成一个新的字符串。

9.1 字符串“对齐”的对象方法

以下对象方法可以生成指定宽度(长度)的字符串,并在给定的宽度内对齐原字符串的位置,其余部分用空格填充。

s.center(n)得到将s串居中的长度为n的字符串,空格填充

s.ljust(n)得到将s串居左的长度为n的字符串,空格填充

s.rjust(n)得到将s串居右的长度为n的字符串,空格填充

9.2 与C语言一致的使用点位符(%?)的格式化方式

前面有用%号引导占位符,后面用变量或表达式去替换前面的占位符,形成一个表达式输出

9.3 字符串的format方法

s = "The {} of 2 + 3 is {}"

s.format("result",2+5)可以生成:

The result of 2 + 3 is 7

s描述了结果字符串的基本形式(模式),其中的{}称为替换域,它们将分别被format中的实参表达式产生的字符串替代。

在{}中还可以包含域名、字符类型、宽度,填充符号等内容,如:

{1:->10s}字符串形式,第1个实参宽10,>表示右对齐,填充字符是-

{price:10.2f}浮点形式,域名为price,宽10个字符,2个小数位

{:<<10d}十进制整数形式,宽10字符,<表示居左,用字符<填充

10 转义字符与元字符串

需要在字符中使用特殊字符(如容器类对象的界定符,键盘上不存在的字符,如制表符,换行符等)时,python用反斜杠()转义字符进行转义,也就是就这些字符当作普通字符使用,不作特殊用途。转义字符用反斜杠符号引导,如' '表示换行,'''转义单引号;

原始字符串用字母r引导,如‘r,htttp\www.baidu:?'keyword',others',把一个字符串中的每个字符全部当做普通字符使用,这样可以减少转义字符的使用,让文本显得更清晰。

字符串的单双引增加了字符串的灵活性,减少了转义字符的使用,比如字符串中有单引号时,最外层可以用双引号。需要注意的是,字符串中不能出现和最外层引号相同的引号。

更多内容请参考:https://www.yiibai.com/python3/python_strings.html

附原码:

s = 'a' #使用单引号定义一个单字符

s0 = "hi,python" #直接通过定义描述构造字符串(双引号)

print(s,' ',s0)

list1 = [1,1,2,3,5,8,13]

s2 = ""

for s in list1:

s2 += str(s) # 类型转换str()

print(s2)

list2 = ['this', 'is', 'a', 'test!']

s3 = ",".join(list2) # 拼接列表元素构造字符串

print(s3)

s4 = '''Tom said,"Let's go."''' #不同定界符之间可以相互嵌套

# 使用三引号定义一个多行字符串↓

s5 = """string block:

1st:

2nd

"""

print(s4,' ',s5)

'''

a

hi,python

11235813

this,is,a,test!

Tom said,"Let's go."

string block:

1st:

2nd

'''

s = "hi,python"

lis = []

for i in s: # 直接迭代元素

lis.append(i)

print(lis)

lis = []

for i in range(len(s)): # 通过下标迭代元素

lis.append(s[i])

print(lis)

'''

['h', 'i', ',', 'p', 'y', 't', 'h', 'o', 'n']

['h', 'i', ',', 'p', 'y', 't', 'h', 'o', 'n']

'''

print(ord('1'),ord('a'),ord('A'),ord('中'))

print(chr(49),chr(97),chr(65),chr(20013))

print("bad" in "not very bad")

print("it is true" == "It is True")

print('A' < 'a' )

'''

49 97 65 20013

1 a A 中

True

False

True

'''

# Python采用unicode编码,汉字“中”的unicode编码为\u4e2d

print('\u4e2d',0x4e2d)

'''中 20013'''

print(hex(20013),'%x' % 20013) # 十进制到16进制

'''0x4e2d 4e2d'''

u = '中' # 指定字符串类型对象u,

str1 = u.encode('gb2312') # 以gb2312编码对u进行编码,获得bytes类型对象

print(str1)

str3 = u.encode() # 以utf-8编码对u进行编码,获得bytes类型对象

print(str3)

u1 = str1.decode('gb2312') # 以gb2312编码对字符串str进行解码,获得字符串类型对象

u3 = str3.decode('utf-8') # 以utf-8编码对字符串str进行解码,获得字符串类型对象

print(bytes('中', encoding = "utf-8"))

print(u1,u3)

'''

b'\xd6\xd0'

b'\xe4\xb8\xad'

b'\xe4\xb8\xad'

中 中

'''

s = "this is a test! "

print(s.islower()) # 判断是否全部是小写

s2 = s.capitalize() # 拷贝后首字符大小、其余小写

print(s2)

print(s.find('is'))

print(s.count('is'))

s3 = s.strip() # 拷贝后删去s两端的空白字符(如果有)

print(s3)

s4 = s.strip('th') # 拷贝后删去s两端的与chars相同的字符(如果有)

print(s4)

'''

True

False

True

True

This is a test!

2

2

this is a test!

is is a test!

'''

s = "this is a test! "

lis = s.split()

print(lis)

lis2 = ",".join(lis)

print(lis2)

'''

['this', 'is', 'a', 'test!']

this,is,a,test!

'''

n = 999

print('00000'+ str(n)) # 将数字转换为字符串

print(int('123')) # 字符串转换为整数

print(float('-1.23')) # 字符串转换为实物

'''

00000999

123

-1.23

'''

from random import randint

for i in range(5):

print(str(randint(1,100)**4).rjust(10),

str(randint(1,100)**4).rjust(10),

str(randint(1,100)**4).rjust(10))

'''

2313441 13845841 40960000

1336336 2085136 20736

45212176 78074896 31640625

614656 57289761 14776336

38416 625 331776

'''

print('%2d-%02d' % (3, 1))

sf = '%.2f' % 3.1415926

print(sf)

print('Age: %s. Gender: %s' % (25, True))

print('growth rate: %d %%' % 7)

'''

3-01

3.14

Age: 25. Gender: True

growth rate: 7 %

'''

s4 = "The {} of 2 + 3 is {}"

s5 = s4.format("result",2+5)

print(s5)

'''

The result of 2 + 3 is 7

'''

from math import sin,cos

head = "{:<5} {:<12s} {:<12s}"

content = "{:5.3f} {:12.10f} {:10.10f}"

def gen_table(start, end, step):

print(head.format("x","sin(x)","cos(x)"))

x = start

while x < end:

print(content.format(x,sin(x),cos(x)))

x += step

gen_table(0.0, 1.05, 0.1)

'''

x sin(x) cos(x)

0.000 0.0000000000 1.0000000000

0.100 0.0998334166 0.9950041653

0.200 0.1986693308 0.9800665778

0.300 0.2955202067 0.9553364891

0.400 0.3894183423 0.9210609940

0.500 0.4794255386 0.8775825619

0.600 0.5646424734 0.8253356149

0.700 0.6442176872 0.7648421873

0.800 0.7173560909 0.6967067093

'''

print(1.68,' ',2.71828,' ',3.14) # 使用转义字符, 表示制表符

# print ('字符串中包含'"/ ') # 语法错误

print ('字符串中包含'"/ ') # 使用转义符号转义字符

print (r'字符串中包含'"/ ') # 字符串以字母r开头表示使用原始字符串

'''

1.68 2.71828 3.14

字符串中包含'"/

字符串中包含'"/

'''

上一篇下一篇

猜你喜欢

热点阅读