python基础学习-day7

一,编码的进阶(utf-8,gbk,Unicode)

由于用各自编码的不同:导致每种编码写的内容在其他编码中显示的内容不同,因此想要让不同编码之间都可以看懂他们的内容,因此需要i通过Unicode【是最全的编码,所以其他编码之间的转化都通过Unicode来完成】来转化。而由于字符是不可以直接转化的所以需要把字符转化为bytes(字节),然后在通过Unicode来实现转化。

  1,把字符串通过某种编码转化为字节(bytes):通过encode方法来把字符串编码成字节【ncode()想转化为什么编码方式的字节,就在括号中输入相应的编码】

s = '中国'
b1 = s.encode('utf-8')
print(b1,type(b1))
str转化为utf-8编码的字节

  2,把字节(bytes)通过某种编码转化为字符串:通过decode方法把字节转化为另外编码的字节

s = '中国'
b1 = s.encode('utf-8')
print(b1,type(b1))
s1 = b1.decode('utf-8')
print(s1)
View Code

  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)
View Code

由于所有的编码中都共用ASCII编码中的(数字,英文,特殊字符),因此当转化这些内容是可以不用先转化为Unicode,而直接转化

s = 'abc123'
b = s.encode('utf-8')
s1 = b.decode('gbk')
print(s1)
View Code

 二,文件操作

文件操作的方法: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()
文件读取-read()
f = open('文件',encoding='utf-8')
f.readline()
f.close()
文件读取-readline()
f = open('文件',encoding='utf-8')
f.readlines()
f.close()
文件读取-readlines()

  r+:读写模式(先读后写)【***很重要

f = open('文件',encoding='utf-8',mode='r+')
content = f.read()
f.write('666')
f.close()
View Code

  rb:针对非文字类文件(例如图片)

f1 = open('美女.jpg',mode='rb')
print(f1.read())
f1.close()
View Code

2,文件的写

文件的写是覆盖填写,会把源文件直接覆盖为写的新内容,如果文件不存在会新建文件

文件写的模式:

  w:只写模式(只能写)

f = open('文件',encoding='utf-8',mode='w')
f.write('随便写一点')
f.close()
View Code

  wb:(就是复制非文字的文本)

f1 = open('美女.jpg',mode='rb')
content = f1.read()
f1.close()

f2 = open('美女1.jpg',mode='wb')
f2.write(content)
f2.close()
View Code

3,文件的追加

文件的追加就是在文件最后添加上新写入的内容,如果文件不存在则新建

  a:追加模式

a 没有文件,创建文件,写入内容
f = open('a模式',encoding='utf-8',mode='a')
f.write('很多让人很有成就感的事情')
f.write('很多让人很有成就感的事情')
f.write('很多让人很有成就感的事情')
f.close()
View Code

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','文件')
View Code

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)
View Code

深拷贝:deepcopy,这里需要调用一个模块(copy)。深拷贝就是完整的复制一份数据,对新拷贝的数据做的任何操作都不会影响原数据

import copy
l1 = [1, 2, 3, [11, 22]]
l2 = copy.deepcopy(l1)
l2[3].append(33)
print(l1)
print(l2)
View Code

##备注:面试题经常会涉及深浅拷贝,需牢记

猜你喜欢

转载自www.cnblogs.com/dpStarrysky/p/10506659.html