1. 字符串
1.1. 字符串格式化
字符串有三种格式化方式 ,分别如下:
- 方式一:
%s 字符串占位,%d 占位整数,%f 占位小数
s = "我叫%s, 我住在%s, 我今年%d岁, 我喜欢%s" % (name, address, age, hobby)
s0 = "我叫%s" % name
print(s0)
- 方式二:
s1 = "我叫{}, 我住在{}, 我今年{}岁, 我喜欢{}".format(name, address, age, hobby)
print(s1)
- 方式三:
s2 = f"我叫{name},我叫{name},我叫{name},我叫{name},我今年{age}岁,我叫{name},我叫{name}"
print(s2)
1.2. 字符串索引和切片
注意:同列表切片
-
基本概念 (1)索引:按照位置提取元素 (2)切片:从一个字符串中提取一部分内容 -
语法 (1)s[start:end] 从start到end进行切片. 但是取不到end [start, end) (2)s[start:end:step] 从start切到end, 每step个元素出来一个元素 (3)通过步长的符号可以控制切片的方向,切片步长默认为1 -
实例
s = "我叫周杰伦,你呢? 你叫周润发吗?"
print(s[3:6])
print(s[:5])
print(s[6:])
print(s[:])
print(s[-3:-1])
print(s[-1:-3])
s = "我爱你"
print(s[::-1])
s = "abcdefghijklmnopqrst"
print(s[2:11:3])
print(s[-1:-10:-3])
2.set集合
2.1. 增删改查
Set集合:Set集合是无序的。 (1)set集合要求存储的数据必须是可以进行哈希计算的,根据计算出来的哈希值进行数据存储。 (2)不可哈希类型:list, dict ,因此set集合中不能出现这两种类型的元素。
s = set()
s = {1, 2, 3, "呵呵", (1, 2, 3)}
s.add("zhangsan")
print(s)
s.pop()
s.remove(2)
print(s)
for item in s:
print(item)
2.2. 交集、并集、差集
s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"}
print(s1 & s2)
print(s1.intersection(s2))
print(s1 | s2)
print(s1.union(s2))
print(s1 - s2)
print(s1.difference(s2))
set集合另一重要功能是去重
lst = ["周杰伦", "昆凌", "蔡依林", "侯佩岑", "周杰伦", "昆凌", "蔡依林", "侯佩岑", "周杰伦", "昆凌", "蔡依林", "侯佩岑"]
print(lst)
print(list(set(lst)))
3.字符编码
3.1. 字符编码发展史
1. ASCII编码(开天辟地) (1) 在计算机中,所有的数据的存储和运算时都要使用二进制数表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码(American Standard Code for Information Interchange,美国信息互换标准代码) ,统一规定了常用符号用哪些二进制数来表示。
(2 ) ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年。ASCII码,用一个字节表示,8位能够表示256个字符,可以用来表示所有的大小写字母,数字、特殊符号 ,足够美国人用的了,事实上他们只用到了128个字符,还有1位就空着了。
ascii => 编排了128个文字符号(英文大小字母,数字,特殊符号). 只需要7个0和1就可以表示了. 01111111 => 1 byte => 8bit
这个ascii一直延续到今天 (预留的1位还能编码128个文字符号)
2. ANSI标准 其他国家逐渐普及计算机…,为了满足其他国家字符编码的需要,老美搞了一个ANSI标准:每个字符使用16bit编码(2byte) ,原来ASCII的位置不变,其它的位置让各个国家(或地区)自己去编码,于是:
ANSI => 一套标准, 每个字符 16bit, 2byte => 2^16 = 65536
00000000 01111111 : ascii 的位置不变,其它的位置让各个国家去自己编码
- 中国制定了
GB2312 编码,把中文编码进去 - 台湾指定了
big5 编码 - 日本制定了
Shift_JIS 编码 - 韩国制定了
Euc-kr 编码
(1) GB2312: 中国于1980年发布了GB2312,就是国标的拼音,这个编码用区位码(94个区,每区94个字符)的方式可以支持7000多个汉字,它所收录的汉字已经覆盖中国大陆99.75%的使用频率,基本可以满足汉字计算机的需要了。
(2) GBK1.0 : 7000多个汉字人类当然是不能满足,所以人们在GB2312的基础上开始扩展,所以1995年GBK1.0诞生了(国标扩展的拼音),可以支持2万多个汉字。
(3) GB18030: 2000年的时候GB18030来了,可以支持2万7千多个汉字。
存在问题:随着全球化的趋势,这套编码并不通用。
3. Unicode Unicode编码也称万国码(满足各个国家编码的需要),但是它有一个缺点就是浪费存储空间比较大。
早期Unicode没有意识到这个问题. UCS-2标准 2个字节.
进行了扩充, UCS-4 4个字节
00000000 00000000 00000000 01111111 扩充成四个字节需要的存储空间变大了
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536(注:此处说的的是最少2个字节,可能更多)。 4. UTF编码 UTF是变长字符编码,是对Unicode编码的压缩和优化。 例如: UTF-8包含于Unicode,只是他不再使用最少使用1个字节,而是将所有的字符和符号进行分类:
- 英文: 8bit, 1byte
- 欧洲文字: 16bit, 2byte
- 中文: 24bit, 3byte
另外, (1)UTF-16 最少使用2个字节。 (2) windows默认GBK, mac默认UTF-8。GBK和UTF-8不能直接转换。 (3)ASCII 一个字节,GBK两个字节, UTF-8变长字节。
3.2. 编码和解码
1. str.encode("编码") 进行编码
2. bytes.decode("编码") 进行解码
编码:
s = "周杰伦"
bs1 = s.encode("gbk")
bs2 = s.encode("utf-8")
print(bs1)
print(bs2)
如何把一个GBK字节转换UTF-8字节? 先把GBK字节转化为文字,再把文字转化为UTF-8字节。
bs = b'\xd6\xdc\xbd\xdc\xc2\xd7'
s = bs.decode("gbk")
bs2 = s.encode("utf-8")
print(bs2)
4. 文件读写
4.1. 文件基本操作
1. open
f = open('文件路径', mode='r', encoding='utf-8')
mode常用的模式:
- r:表示文件只能读取
- w:表示文件只能写入
- a:表示打开文件,在原有内容的基础上追加内容,在末尾写入
- w+:表示可以对文件进行读写双重操作
mode参数可以省略不填,默认为r模式mode参数还可以指定以什么样的编码方式读写文本,默认情况下open是以文本形式打开文件的,比如上面的四种mode模式。
当你需要以字节(二进制)形式读写文件时,只需要在mode参数中追加’b’即可:
- rb:以二进制格式打开一个文件,用于只读
- wb:以二进制格式打开一个文件,用于只写
- ab:以二进制格式打开一个文件,用于追加
- wb+:以二进制格式打开一个文件,用于读写
常用方法:
f.read()
f.readlines()
f.readline()
f.close()
注意: (1)当你在默认模式下读取文本文件时(二进制文件不可以),文件中的换行符会转换为’\n’形式。 (2)也就是说,你读取的txt文本,其中换行符会以’\n’形式出现,写入txt文本时,文本中的’\n’会变成换行指令。 2.使用关键字with 好处:不需要手动去关闭一个文件
with open('文件路径', mode='r', encoding='utf-8') as f:
lines = f.readlines()
print(lines)
|