2-1-2python语法基础--基础-数据类型-字符串

字符串的curd

创建

name ='andy'  # 这就是新建了一个字符串,用单引号,和双引号都可以,

查询

这就要用到切片了,
print(name[1])  # 通过索引获取字符串中字符
print(name[0:2])  # 截取字符串中的一部分,遵循左闭右开原则

查询一个元素是否在字符串中:
print('a' in name)  # 成员运算符 - 如果字符串中包含给定的字符返回 True
print('a' not in name)  # 成员运算符 - 如果字符串中不包含给定的字符返回 True

print(str1.find('a',0,len(str1)))  # 检测字符串中是否包含子字符串 str ,如果指定范围,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。
print(str1.index('a',0,len(str1)))  # 跟find()方法一样,只不过如果str不在字符串中会报一个异常.所以一般还是用find

print(str1.isalnum())  # 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
print(str1.isalpha())  # 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False
print(str1.isdigit())  # 如果字符串只包含数字则返回 True 否则返回 False..


print(str1.count('a',0,len(str1)))  # 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。

修改

# 字符串的字母转换
str1 = 'andy'
print(str1.capitalize())  # 将字符串的第一个字符转换为大写
print(str1.upper())  # 转换字符串中的小写字母为大写
print(name.lower())
name ='andy  eerere 123123  ggggg'
print(name.title())  # 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
Andy  Eerere 123123  Ggggg


# 字符串替换
print(str1.replace("a","A",1))  # 字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。

# 字符串分割
print(str1.split('n',2))  # split() 通过指定分隔符对字符串进行切片,返回一个列表,
# 如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。
# num -- 分割次数。默认为 -1, 即分隔所有。

# 字符串拼接
name ='andy'
print("my name is "+ name)  # 字符串连接

# 字符串填充
name ='andy  eerere 123123  ggggg'
print(name.center(100,'*'))  # 这是把字符串在10个width中显示,空的显示后面的字符
# ******************andy  eerere 123123  ggggg*****************
print(name.ljust(100,'*'))
# andy  eerere 123123  ggggg********************
print(name.rjust(100,'*'))
# *******************************andy  eerere 123123  ggggg

# 去空格
print(name.strip())  # 去掉两边,中间去不掉,
print(name.lstrip()) # 去左边
print(name.rstrip()) # 去右边

内置函数操作字符串

str1 = 'andy'
print(len(str1))  # 返回字符串长度
print(max(str1))  # 最大,
print(min(str1))  # 最小

字符串格式化

官网有讲到输入和输出
https://docs.python.org/zh-cn/3/tutorial/inputoutput.html

第一种:
要在字符串开头的引号/三引号前添加 f 或 F 。在这种字符串中,可以在 { 和 } 字符之间输入引用的变量,或字面值的 Python 表达式。

year = 2016
>>> event = 'Referendum'
>>> f'Results of the {year} {event}'
'Results of the 2016 Referendum'

第二种:
字符串的 str.format() 方法需要更多手动操作。该方法也用 { 和 } 标记替换变量的位置,虽然这种方法支持详细的格式化指令,但需要提供格式化信息。

>>> yes_votes = 42_572_654
>>> no_votes = 43_132_495
>>> percentage = yes_votes / (yes_votes + no_votes)
>>> '{:-9} YES votes {:2.2%}'.format(yes_votes, percentage)
' 42572654 YES votes 49.67%'

第三种:
% 运算符(求余符)也可用于字符串格式化。给定 'string' % values,则 string 中的 % 实例会以零个或多个 values 元素替换。此操作被称为字符串插值。例如:

>>> import math
>>> print('The value of pi is approximately %5.3f.' % math.pi)
The value of pi is approximately 3.142.

字符串的转义


# 单引号,双引号的转义

a = ""
a1 = '"name":"value"'
a2 = "\"name\":\"value\""
print(a1)
print(a2)
# 这种细节的使用,要注意,

# python格式化字符串 转义%
格式化字符串时,如果字符中包含%,需要用%对%进行转义,即%%

a= "%%%s%%"%("abc")
a
'%abc%'


序列转字符串

seq = ('a','d','d','y')
print('-'.join(seq))  # a-d-d-y

list1 = ['a','d','d','y']
print('-'.join(list1))  # a-d-d-y

字符串转序列

a = "12m2m2"
print(list(a))  # ['1', '2', 'm', '2', 'm', '2']

print(a.split("m"))  # ['12', '2', '2']

字符串转换byte

字节指的是计算机上面用来表示存储值的一种计量单位,但是它放在python里面的话就是一种数据类型,这个数据类型的名称为bytes。
可以将其看做是二进制字节格式的python中表示,它显示在python中的形式为字符串前加上小写字母b。

而要将一个字符串转为bytes类型需要使用到encode()函数,这个函数的意思就是编码。只需要在编码方法内传入表示中文的utf-8参数即可将其转为bytes对象,因为这个方法的本质作用就是把python数据转为可以通用的计算机数据格式,代码如下:


test_str = 'my name is HanMeimei'

# 方法一
bytes_str = test_str.encode('utf-8')
print(bytes_str)  # 结果:b'my name is HanMeimei'
print(type(bytes_str))  # 结果:<class 'bytes'>

# 方法二
bytes_str2 = test_str.encode()
print(bytes_str2)  # 结果:b'my name is HanMeimei'
print(type(bytes_str2))  # 结果:<class 'bytes'>

# 方法三
bytes_str3 = b'my name is HanMeimei'
print(bytes_str3)  # 结果:b'my name is HanMeimei'
print(type(bytes_str3))  # 结果:<class 'bytes'>

byte转换字符串

那么要将bytes类型的对象转为python字符串类型的话也就是使用对应的方法,该方法就是decode(),翻译过来就是解码的意思。它在调用是也需要传入参数值utf-8,作用是将utf-8编码的bytes类型数据转为python类可以去直接解析和输出打印显示的字符串类型,代码示例如下所示:


bytes_str = b"12m2m2"
test_str = bytes_str.decode('utf-8')

print(test_str)  # 结果:12m2m2
print(type(test_str))  # 结果:<class 'str'>

test_str2 = bytes_str.decode()
print(test_str2)  # 结果:12m2m2
print(type(test_str2))  # 结果:<class 'str'>

例题:s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"

s = "ajldjlajfdljfddd"
s = set(s)
print(s)  # {'l', 'f', 'd', 'j', 'a'}
s = list(s)
print(s)    # ['l', 'f', 'd', 'j', 'a']
# s= s.sort(reverse=False)  # sort没有返回值,所以这样写不对,
s.sort(reverse=False)
print(s)  # ['a', 'd', 'f', 'j', 'l']
s = "".join(s)
print(s)  # adfjl

例题:x="abc",y="def",z=["d","e","f"],分别求出x.join(y)和x.join(z)返回的结果


x="abc"
y="def"
z=["d","e","f"]
print(x.join(y))  # dabc eabc f
print(x.join(z))  # dabc eabc f

# join()括号里面的是可迭代对象,x插入可迭代对象中间,形成字符串,结果一致,有没有突然感觉字符串的常见操作都不会玩了

例题:a="hello"和b="你好"编码成bytes类型


a="hello"
b="你好"
a = b"hello"
b="你好".encode()
print(a,b)

例题:字符串去空格

# python 去掉字符串空格
# 1,strip() 方法,去除字符串开头或者结尾的空格

a = " a b c "
print(a.strip())  # 注意只能去掉开头和结尾的,中间的去不掉,

# 2:lstrip() 方法,去除字符串开头的空格
print(a.lstrip())

# 3:rstrip() 方法,去除字符串结尾的空格
print(a.rstrip())

# 4:replace() 方法,可以去除全部空格
print(a.replace(" ", ""))

# 5: join() 方法 + split() 方法,可以去除全部空格
# join为字符字符串合成传入一个字符串列表,split用于字符串分割可以按规则进行分割
b = a.split()  # 字符串按空格分割成列表 b['a', 'b', 'c']
c = "".join(b)  # 使用一个空字符串合成列表内容生成新的字符串
print(c)
# 快捷用法
print("".join(a.split()))

字符串填充到固定的长度

 

'''
例题:原字符串左侧对齐, 右侧补零:
'''
str.ljust(width,'0') 
input: '789'.ljust(32,'0')
output: '78900000000000000000000000000000'


'''
原字符串右侧对齐, 左侧补零:
方法一:
'''
str.rjust(width,'0') 
input: '798'.rjust(32,'0')
output: '00000000000000000000000000000798'
'''
方法二:
'''
str.zfill(width)
input: '123'.zfill(32)
output:'00000000000000000000000000000123'
'''
方法三:
'''
'%07d' % n
input: '%032d' % 89
output:'00000000000000000000000000000089'

字符串只要数字

crazystring = ‘dade142.;!0142f[.,]ad’

# 思路,
# 如果让我做我可能就是使用循环,判断元素是否为数字做了,
crazystring = "dade142.;!0142f[.,]ad"
a = []
for i in crazystring:
    if i.isdigit():
        a.append(i)
print(a)

# 但是有一个更加简单的办法
>>> filter(str.isdigit, crazystring)
‘1420142′

只保留字母
>>> filter(str.isalpha, crazystring)
‘dadefad’

posted @ 2023-06-01 14:27  技术改变命运Andy  阅读(7)  评论(0编辑  收藏  举报