一,编码的进阶(utf-8,gbk,Unicode)
由于用各自编码的不同:导致每种编码写的内容在其他编码中显示的内容不同,因此想要让不同编码之间都可以看懂他们的内容,因此需要i通过Unicode【是最全的编码,所以其他编码之间的转化都通过Unicode来完成】来转化。而由于字符是不可以直接转化的所以需要把字符转化为bytes(字节),然后在通过Unicode来实现转化。
1,把字符串通过某种编码转化为字节(bytes):通过encode方法来把字符串编码成字节【ncode()想转化为什么编码方式的字节,就在括号中输入相应的编码】
s = '中国' b1 = s.encode('utf-8') print(b1,type(b1))
2,把字节(bytes)通过某种编码转化为字符串:通过decode方法把字节转化为另外编码的字节
s = '中国' b1 = s.encode('utf-8') print(b1,type(b1)) s1 = b1.decode('utf-8') print(s1)
3,各个编码之间的转化(utf-8 gbk unicode)
s = '中国' b1 = s.encode('utf-8') # 转化为utf-8编码的字节 s1 = b1.decode('utf-8') # 通过解码来把字节转化为Unicode b2 = s1.encode('gbk') # 转化为gbk编码的字节 s2 = b2.decode('gbk') # 通过解码来把字节转化为gbk print(b2,s2)
由于所有的编码中都共用ASCII编码中的(数字,英文,特殊字符),因此当转化这些内容是可以不用先转化为Unicode,而直接转化
s = 'abc123' b = s.encode('utf-8') s1 = b.decode('gbk') print(s1)
二,文件操作
文件操作的方法:f = open("文件名",encoding='编码',mode=‘模式’) ,在操作完毕的需要关闭文件,f.close()【很重要,必须加上关闭文件】
在这里存在一个python的内置函数:open(),他的作用就是调用;操作系统调用文件命令的;接口
操作文件的流程:
1,打开文件,产生一个文件句柄
2,对文件句柄进行相应的操作
3,关闭文件句柄
文件的操作分为:读,写,改,追加等,每种操作中又分为四种模式(r,r+,rb,r+b以此类推),下面来详细讲解:
1,文件的读:
文件的读取分为三种方法:read()【读取全部内容】,readline()【读取一行内容】,readlines()【把文件的每一行内容当做字符串添加到列表中返回】
文件读的模式():
r:只读模式(只能读,默认就是只读模式,mode可以不填加)【***很重要】
f = open('文件',encoding='utf-8',mode='r') # 文件默认类型就是读,mode可以不写 f.read() f.close()
f = open('文件',encoding='utf-8') f.readline() f.close()
f = open('文件',encoding='utf-8') f.readlines() f.close()
r+:读写模式(先读后写)【***很重要】
f = open('文件',encoding='utf-8',mode='r+') content = f.read() f.write('666') f.close()
rb:针对非文字类文件(例如图片)
f1 = open('美女.jpg',mode='rb') print(f1.read()) f1.close()
2,文件的写
文件的写是覆盖填写,会把源文件直接覆盖为写的新内容,如果文件不存在会新建文件
文件写的模式:
w:只写模式(只能写)
f = open('文件',encoding='utf-8',mode='w') f.write('随便写一点') f.close()
wb:(就是复制非文字的文本)
f1 = open('美女.jpg',mode='rb') content = f1.read() f1.close() f2 = open('美女1.jpg',mode='wb') f2.write(content) f2.close()
3,文件的追加
文件的追加就是在文件最后添加上新写入的内容,如果文件不存在则新建
a:追加模式
a 没有文件,创建文件,写入内容 f = open('a模式',encoding='utf-8',mode='a') f.write('很多让人很有成就感的事情') f.write('很多让人很有成就感的事情') f.write('很多让人很有成就感的事情') f.close()
4,文件的改(其实是新建一个文件,把修改后的内容写入,然后替换原文件)
这里会涉及一个模块:os模块(删除操作需要)
import os with open('文件',encoding='utf-8') as f1,\ open('文件.bak',encoding='utf-8',mode='w') as f2: # 3,将原文件内容读取出来,按照你的要求改成新内容,写入新文件. for old_line in f1: new_line = old_line.replace('alex','sb') f2.write(new_line) # 4,删除原文件. os.remove('文件') # 5,将新文件重命名成原文件. os.rename('文件.bak','文件')
5,文件的其他操作
f.flush:强制保存
readable:是否是只读
writeable:是否是只写
seek:调整光标位置【在网络编程是会使用】
tell:返回光标位置
truncate:截取文件【不受seek影响,都是从文件开始截取,调整光标位置无效】
读取文件的另一种写法:with open('文件',encoding='utf-8',mode='r+') as f:【此种方法好处:不需要我们来关闭文件】
三,深浅拷贝
浅拷贝:无论是在同一代码块还是不同的代码块中,浅拷贝都是拷贝一个源数据的外壳,但是里面的数据都是共用一个【当修改数据内容时,如果源数据内容中存在嵌套,则修改浅拷贝后数据的嵌套内容,源数据中的嵌套内容也会改变】
l1 = [1, 2, 3, [11, 22]] l2 = l1.copy() l1[0] = 5 print(l1) print(l2)
深拷贝:deepcopy,这里需要调用一个模块(copy)。深拷贝就是完整的复制一份数据,对新拷贝的数据做的任何操作都不会影响原数据
import copy l1 = [1, 2, 3, [11, 22]] l2 = copy.deepcopy(l1) l2[3].append(33) print(l1) print(l2)
##备注:面试题经常会涉及深浅拷贝,需牢记