字符串(字符序列)和字节序列
字符
- 由于历史原因, 将字符定义为
unicode
字符还不够准确, 但是未来字符的定义一定是unicode
字符
字节
就是字符的二进制表现形式
码位
我们计算机显示的实际上是码位
代码语言:javascript复制>>> '你好'.encode("unicode_escape").decode()
'\u4f60\u597d'
>>>
>>> 'u4f60u597d'
'你好'
UNICODE
标准中以4~6个十六进制数字表示
编码
字符序列(string) -> 字节序列(bytes) -------------编码(encode)
代码语言:javascript复制>>> "你好".encode("utf-8")
b'xe4xbdxa0xe5xa5xbd'
字节序列(bytes) -> 字符序列(string) -------------解码(decode)
代码语言:javascript复制>>> b
b'xe4xbdxa0xe5xa5xbd'
>>> b.decode("utf")
'你好'
编码错误
乱码和混合编码
检查编码
没有办法通过字节序列来得出编码格式, 都是统计学来预估当前的编码
代码语言:javascript复制# 安装chardet
pip install chardet
# 导入charet
>>> import chardet
>>> chardet.detect(b)
解决乱码和混合编码
忽略错误编码
代码语言:javascript复制>>> b_2.decode("utf-8", errors='ignore')
'你好'
利用鬼符来替换
代码语言:javascript复制>>> b_2.decode("utf-8", errors='replace')
'你好��'
字符串的CRUD操作
代码语言:javascript复制通过dir("")可以查看当前字符串的操作方法
Create(创建)
>>> a = "a"
>>> id(a)
22951584
>>> a = a "b"
>>> id(a)
60513280
>>> a
'ab'
=
a = "b" 就是 a = a "b" 省略写法
Retrieve(检索)
根据索引获取字符
在计算机语言当中, 索引值是从0开始数的
代码语言:javascript复制>>> a = "hello, world"
>>> a[1]
'e'
find和index(获取目标字符的索引值)
代码语言:javascript复制>>> a.find("e")
1
>>> a.find("!")
-1
# 找不到目标字符时, index会报错
>>> a.index("!")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
startwith和endwith
代码语言:javascript复制>>> f = "2020-11-22-xxxxx"
>>> f.startswith("2020-11-22")
True
>>> f = "xxxxx.jpg"
>>> f.endswith("jpg")
True
UPDATE(更新)
replace(替换)
返回的是一个新的字符串
代码语言:javascript复制a.replace("wer", "wor")
split(分割)
代码语言:javascript复制>>> a = "<<python>>, <<java>>, <<c >>"
>>> a.split(",")
['<<python>>', ' <<java>>', ' <<c >>']
join(拼接)
代码语言:javascript复制>>> b
['<<python>>', ' <<java>>', ' <<c >>']
>>> ",".join(b)
'<<python>>, <<java>>, <<c >>'
DELETE(删除)
strip
代码语言:javascript复制>>> a
' hello, world '
>>> a.strip()
'hello, world'
>>>
lstrip
rstrip
字符串的输出和输入
保存到文件
代码语言:javascript复制# open函数打开一个文件, 没有文件会新建, 但是路劲不对会报错
# 指定文件名, 方法(读, 写, 追加), 编码格式
output = open("output.txt", "w", encoding="utf-8")
content = "hello, world"
# 正式写入文件
output.write(content)
# 关闭文件句柄
output.close()
读取文件
代码语言:javascript复制input = open("output.txt", "r", encoding="utf-8")
# 获取文件中的内容
content = input.read()
print(content)
# 暂时理解为只能读取一遍
content_2 = input.read()
print(content_2)
追加文件
代码语言:javascript复制output = open("output.txt", "a", encoding="utf-8")
content = "nhello, world"
# 正式写入文件
output.write(content)
# 关闭文件句柄
output.close()
字符串的格式化输出
format
按传入参数默认顺序
代码语言:javascript复制a = "ping"
b = "pong"
"play pingpong: {}, {}".format(a, b)
按指定参数索引
代码语言:javascript复制a = "ping"
b = "pong"
"play pingpong: {0}, {1}, {0}, {1}".format(a, b)
按关键词参数
代码语言:javascript复制a = "ping"
b = "pong"
print("play pingpong: {a}, {b}, {a}, {b}".format(a='ping', b='pong'))
按变量(推荐, 但是只有3.6以上才可以使用)
代码语言:javascript复制a = "ping"
b = "pong"
print(f"playing pingpong: {a}, {b}")
小数的表示
代码语言:javascript复制>>> "{:.2f}".format(3.14159)
'3.14'
>>>
%
代码语言:javascript复制>>> "playing %s %s" % ("ping", "pong")
'playing ping pong'