3-字符串常用操作


基于%号+占位符,实现格式化输出

# 要输出一个数字
num = 10
print("WD%04d" % num)  # WD0010

num = 10
print("%04d" % num)    # 0010
# 格式化输出浮点数
num = 3.5
print("%.2f元" % num)     # 3.50元

字符串.capitalize()

字符串首个字母大写,如果字符串首个字符不是字母,则不会转换大写。

s1 = "hello world"
print(s1)        # hello world
ret = s1.capitalize()
print(ret)       # Hello world

字符串.count(字符子串)
统计字符子串在字符串中出现的次数

s1 = "hello world"
ret = s1.count("l")
print(ret) # 3

字符串.encode() 编码,把一个字符串转换成二进制安全格式字符串(bytes类型)
字符串.decode() 解码,把一个二进制安全格式字符串转换成普通字符串
encode和decode() 默认都有个encoding参数选项用于设置当前字符串的编码类型,默认是utf-8
常见于:网络传输的数据,跨平台传输的数据,从内存、硬盘中读取的数据、加密解密都可能是bytes

s1 = "中文"
data = s1.encode()
print(data)  # b'\xe4\xb8\xad\xe6\x96\x87'

# 声明一个bytes字符串
s2 = b'\xe4\xb8\xad\xe6\x96\x87'
data = s2.decode()
print(data)  # 中文
# encode也可以用于转换字符编码
s1 = "你好"
data = s1.encode(encoding="gbk")
print(data)  # b'\xc4\xe3\xba\xc3'

# 如果字符串在编码的时候,设置了非utf-8,则字符串在解码的时候,也要使用对应的非utf-8编码,否则python会报UnicodeDecodeError编码解码错误
s2 = b'\xc4\xe3\xba\xc3'
data = s2.decode(encoding="gbk")
print(data)   # 你好

字符串.endswith(字符子串) # 判断字符串是否以字符子串结尾
字符串.startswith(字符子串) # 判断字符串是否以字符子串开头
字符串.find(字符子串) # 获取字符子串在字符串的下标位置,找不到结果为-1,找到则返回首次出现的下标位置,从0开始 [不报错!]
字符串.index(字符子串) # 获取字符子串在字符串的下标位置,找不到则报错,找到则返回首次出现的下标位置,从0开始 [报错!]

# 判断某个人是否姓"张"
name = "王晓明"
ret = name.startswith("张")
print(ret)      # False

name = "王晓明"
if name.startswith("张"):
    print("你好,张先生!!")    # 空
# 判断某个人的名字里面是否有"明"
name = "王晓明"
ret = name.find("张")   
print( ret )        # -1


name = "王晓明"
ret = name.find("王") 
print( ret )        # 0


name = "王晓明"
ret = name.find("明") 
print( ret )        # 2
# 判断某个人的名字是否以"明"结尾
name = "王晓明"
ret = name.endswith("明")
print( ret )      # True
# 判断是否是QQ邮箱
mail = "1234@qq.com"
ret = mail.endswith("qq.com")
print(ret) # True
# 判断是否是一个合法的邮箱
mail = "1234@qq.com"
ret1 = mail.index("@")
print(ret1) # 4
ret2 = mail.index(".")
print(ret2) # 7
if ret1 < ret2:
    print("邮箱合法!")     # 邮箱合法!   以后用正则判断更为准确!当然要最准确的话,就要通过发送邮件来证明

注意:find默认从左往右查找字符子串出现的第一个位置,如果希望从右往左查,则使用rfind

s1 = "hello world"
index = s1.find("l")
print(index) # 2

s1 = "hello world"
index = s1.rfind("l")
print(index) # 9

判断字符串的组成成分
字符串.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True 否则返回 False

s1 = "hello100"
ret = s1.isalnum()
print(ret) # True

s1 = "hello+100"
ret = s1.isalnum()
print(ret) # False

字符串.isdecimal() 如果 string 只包含十进制数字则返回 True 否则返回 False

s1 = "123kl5k23k34"
ret = s1.isdecimal()
print(ret) # False


# s1 = "12352.334" # 这种也为False
s1 = "12352334"    # 这种才是True
ret = s1.isdecimal()
print(ret) 

字符串.isspace() # 判断是否是空白字符串,空格字符串

s1 = "" # 空字符串,False
ret = s1.isspace()
print(ret)  # False

s1 = "  " # 空格组成的,True
ret = s1.isspace()
print(ret)  # True

字符串 分割与合并
子串.join(序列) # 合并序列中每一个成员,使用指定子串进行拼接一个字符串
字符串.split(子串) # 使用子串作为分隔符,把字符串按子串分割成多段,组成一个列表 [列表至少有一个成员]
字符串 转 列表 ---> 分割
列表/元组 转 字符串 ---> 合并

data = ["北京市", "昌平区", "白沙路"]
ret  = "--".join(data)
print(ret)     # 北京市--昌平区--白沙路
s1 = "北京市-昌平区-白沙路"
ret = s1.split("-")
print(ret)  # ['北京市', '昌平区', '白沙路']

# 如果无法分割,也不会报错,但是会把整个字符串作为一个整体,保存到列表中作为一个成员
s1 = "北京市-昌平区-白沙路"
ret = s1.split(":")
print(ret)  # ['北京市-昌平区-白沙路']

字符串.splitlines() 按行分割

# 假设这个字符串是在一个文件中读取出来
content = """君不见黄河之水天上来,奔流到海不复回。
君不见高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我倾耳听。
钟鼓馔玉不足贵,但愿长醉不复醒。"""

for item in content.splitlines():
    print(">>> ", item)
    
# >>>  君不见黄河之水天上来,奔流到海不复回。
# >>>  君不见高堂明镜悲白发,朝如青丝暮成雪。
# >>>  人生得意须尽欢,莫使金樽空对月。
# >>>  天生我材必有用,千金散尽还复来。
# >>>  烹羊宰牛且为乐,会须一饮三百杯。
# >>>  岑夫子,丹丘生,将进酒,杯莫停。
# >>>  与君歌一曲,请君为我倾耳听。
# >>>  钟鼓馔玉不足贵,但愿长醉不复醒。

字母转换大小写
字符串.lower() # 把字符串中的英文字母转换成小写
字符串.upper() # 把字符串中的英文字母装换成大写
字符串.title() # 按广告标题格式,把字符串那种所有单词的首字母转换成大写

s1 = "get"
ret = s1.upper()
print(ret) # GET

s2 = "POST"
ret = s2.lower()
print(ret) # post

s3 = "hello world"
ret = s3.title()
print(ret) # Hello World

字符串.strip() # 去除字符串的两边空格,注意:字符串中间的空格不会被删除,只会删除两边连续的空格
字符串.lstrip() # 去除字符串的左边空格,注意:字符串中间的空格不会被删除,只会删除左边连续的空格
字符串.rstrip() # 去除字符串的右边空格,注意:字符串中间的空格不会被删除,只会删除右边连续的空格

s1 = "hello world"
print(len(s1), s1)    # 11 hello world

s2 = "   hello wolrd   "
ret = s2.strip()
print(len(ret), ret)  # 11 hello wolrd

s2 = "   hello wolrd   "
ret = s2.lstrip()
print(len(ret), ret)  # 14 hello wolrd

s2 = "   hello wolrd   "
ret = s2.rstrip()
print(len(ret), ret)  # 14    hello wolrd

字符串替换
字符串.replace(旧子串, 新子串, 替换次数)

# 默认是全部替换
s1 = "python37  python37"
# 把 python 换成 java
ret = s1.replace("python", "java")
print(ret) # java37  java37

# 也可以指定替换次数
s1 = "python37  python37"
# 把 python 换成 java
ret = s1.replace("python", "java", 1)
print(ret) # java37  python37

相关