一、编码知识

1.常见编码

ASCII码

最早的字符串编码时ASCII码(美国标准信息交换码)。

ASCII码仅对 10个数字、26个大写字母、26个小写字母、其他一些符号 进行了编码。

因为ASCII码采用1个字节来对字符进行编码,因此最多只能表示256个字符。

UTF-8

随着技术发展,各国的文字都需要进行编码,诞生了越来越多的编码格式。常见的编码有:UTF-8、GB2312、GBK等。

UTF-8是国际通用的编码。它对全世界所有国家的文字符号都进行了编码。

UTF-8以1个字节表示英文字符、3个字节表示中文即其他语言。

GB2312、GBK

GB2312是我国制定的中文编码标准。

用1个字节表示英语、2个字节表示中文。

GBK是GB2312的扩充,也是用1个字节表示英语、2个字节表示中文。

2.python使用编码

"coding=xxx"指定字符串编码

python中字符串编码需要使用#coding指定,常用的方式有:

#coding=utf-8
#coding:GBK

encode和decode进行编码转换

格式:str1.encode('utf-8')

比如:

str1 = '一二三'
str2 = str1.encode('utf-8')
print("str2=",str2)

str3 = b'\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89'
str4 = str3.decode('utf-8')
print("str4=",str4)

运行结果:

二、字符串

Python字符串除了支持序列通用操作(比较、长度、元素访问、切片等),还有一些特有操作:格式化、字符串查找、字符串替换等。

字符串不可变,因此不能对元素进行增删改。

注:replace()和translate()方法不是对原字符串修改,而是返回一个修改后的字符串。

1.百分号%字符串格式化

“%格式字符1,%格式字符2....”%(字串1,字串2....)

格式字符:

  • 进制:
    • %b:二进制
    • %d或%i:十进制
    • %o:八进制
    • %x:十六进制
  • 大小写:
    • 指数——基底不同
      • %e:基底为e
      • %E:基底为E
    • 浮点数——大小写效果一样
      • %f
      • %F
    • 指数和浮点数——数大用指数显示,数小用浮点数显示,指数显示时基地不同
      • %g:基底为e
      • %G:基底为E
x = "数字%d,对应字符%c" % (65, 65)
print(x)

注:

  • 用%c格式化多个字符时,会报错
x = "%c" % "多个字符"
print(x)
  • 将字符转化为整数,会报错
x = "%d" % "5555"
print(x)

2.fomat()进行格式化

format()支持:位置编号占位,参数占位,序列解包格式化

a.位置编号进行占位

  • 不转换格式:书上写的是{编号: , } ,还可以是{编号}{编号: }
  • 格式化:{编号: 格式},相当于用{}和 : 来代替%。进制转换时,可以用{0:x},也可以用{0:#x},非进制格式化时不能加#
#进制转换可以加井号#,也可以不加
x = "转换成十六进制{0:x},转换成八进制{1:#o}".format(65,65)
print(x)
# 位置编号对应
x = "对应位置1:{1:d},对应位置0:{0:d}".format(0, 1)
print(x)

b.参数占位

# 参数占位
x = "参数b:{b},参数a:{a}".format(a="a", b="b")
print(x)

3.字符串常用函数

1、find()和index()

区别:find()字符串独有的函数,找不到返回-1index()列表、元组、字符串都有,用法一样,找不到会报错

共同点:语法都一样,(指定字串, [起始位置, 终止位置])。返回值都是指定字串第一次出现时的下标

  • find():从前往后查
  • rfind():从后往前查
#find()
x = "aaabbaa"
print(x.find('a'))
print(x.find('a',1,2))
print(x.rfind('a'))
print(x.find('c'))
#index()
x = "aaabbaa"
print(x.index('a'))
print(x.index('a',1,2))
print(x.rindex('a'))
print(x.index('c'))

2、split()和partition()

相同点:都是指定字符进行分割

区别:

  1. split()返回分割结果的列表;partition()返回一个元组,包含分隔符前字串,分割符字串,分割符后字串。
  2. split()分割所有该指定字符;partition()只分割第一次出现的指定字符。
  3. split()可以指定分割次数;partition()固定分割第一个出现字符(固定分割一次)。
#split()和partition()
x = "babacaa"
print(x.split('a'))
print(x.split('a', 2))
print(x.partition('a'))
  • split():指定分割次数时,从前往后数
  • rsplit():指定分割次数时,从后往前数
# split()和rsplit()
# 不指定分割次数时,输出结果一样
x = "babacaa"
print(x.split('a'))
print(x.rsplit('a'))
# split()和rsplit()
# 指定分割次数时,有区别
x = "babacaa"
print(x.split('a', 2))
print(x.rsplit('a', 2))
  • partition():首次出现的指定字符
  • rpartition():最后一次出现的指定字符
# partition()和rpartition()
# 指定分割次数时,有区别
x = "babacaa"
print(x.partition('a'))
print(x.rpartition('a'))

3、replace()

注:返回新的字符串,不是原地修改。

# replace()
x = "babacaa"
print(x.replace('a', 'w'))

4、strip()删除两端指定字符

  • strip():删除两端
  • lstrip():删除右端
  • rstrip():删除左端

注:

  1. 返回新的字符串,不是原地修改
  2. 默认删除空白字符,包括/t,/n 等等
#默认删除空白字符
x = "\tbabacaa"
print(x)
print(x.strip())

删除指定字符时,会删除多个,比如指定'a',如果有 'aaa' 也会全都删掉。

# 删除指定字符:
x = "abacaaa"
print(x)
print(x.strip('a'))

5、eval()

任意字符串转换为表达式求值。可以用表达式,也可以用参数

print(eval("1+2"))  #字符串里直接用数字,输出6

a = 1
b = 2
print(eval("a+b"))  #字符串里用参数,输出3

注:eval()的参数只能是一个字符串,不能写 eval("1"+"2")

6、lower(),upper(),capitalize(),title(),swapcase()

  • lower():全小写
  • upper():全大写
  • capitalize():句子首字母大写
  • title():单词首字母大写
  • swapcase():全部大小写互换
x = "hello world World"
print("lower:     ", x.lower())
print("upper:     ", x.upper())
print("capitalize:", x.capitalize())
print("title:     ", x.title())
print("swapcase:  ", x.swapcase())

7.startswith()和endswith()

判断是否以指定字符串开始或结束,返回True或False

8.isalpha(),isalinum(),isdigit(),isspace(),isupper(),islower()

参数必须是字符串,如要测试是否是全数字,参数也要用 "123",不能用 123

  • isalpha():是否全是字母
  • isalinum():是否全是 数字或字母
  • isdigit():是否全是 数字
  • isspace():是否全是 空白字符(包括/t,/n等)
  • isupper():是否全是 大写字母
  • islower():是否全是 小写字母
x = "123"
print(x.isdigit())

y = "\t \n"
print(y.isspace())

4.random()函数

  • random.random():产生 0 到 1 之间的随机浮点数,不能指定参数
  • random.randint():
  • random.randrange():
  • random.uniform()
  • random.choice()
  • random.shuffle()
import random

print(random.random())            # 产生 0 到 1 之间的随机浮点数
print(random.randint(1, 10))      # 产生 1 到 10 的一个整数型随机数
print(random.randrange(1, 10, 2)) # 生成从1到100的间隔为2的随机整数
print(random.uniform(1.1, 5.4))   # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print(random.choice('tomorrow'))  # 从序列中随机选取一个元素

a = [1, 3, 5, 6, 7]  # 将列表a中的元素顺序打乱
random.shuffle(a)
print(a)