字符编码与文件处理
一、前置知识点:
? 1、程序执行的三大核心硬件(***):
? cpu
? 内存
? 硬盘
? 正常执行一个程序的要点:
? 1、将硬盘中的数据读到内存
? 2、由cpu读内存中的数据进行执行
? 3、在执行程序的时候,生成的数据,优先存入内存
2、python解释器执行一个py文件过程(***)
如果没有python解释器,py文件单纯就是一个文本文件
所以说,想执行py文件,必须先执行python解释器
1、将python解释器的代码有硬盘读到内存
2、将py文件以普通文本文件的格式由硬盘读到内存
3、python解释器去内存中读取py文件的数据
4、识别python语法,执行相应的操作
ps:任何一个文本编辑器的执行,前两部都一样
二、字符编码:
? 字符:世界上一切语言、文字
? 有必要考虑,图片文件、音频文件、视频文件?
文件的输入和输出是两个过程
人类输入的内容都是人类自己可以识别的字符
计算机只能识别0101010二进制字符
将人类的字符,存入内存和硬盘,要经历一个过程:
人类的字符 >>>>>>> (字符编码表) >>>> 计算机二进制
0 a
1 b
01 a
10 b
00 c
11 d
ASCII码表(美国)
用八位二进制来代表一个英文字符(所有的英文字符+符号一共大概128左右)
0000 0000
1111 1111
最多只能表示255位
八位二进制 = 8 bit
8 bit = 1 bytes
1024bytes = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
GBK(中国)
用2个bytes来代表一个字符,兼容英文字符
0000 0000 0000 0000
1111 1111 1111 1111
最多可以表示65535位
shit(小日子过得不错的日本人)
fuck(韩国的)
万国码(unicode)
为了兼容所有的国家的字符,生成unicode
所有的字符都用2bytes
0101 0101 a
0000 0000 0101 0101 a
1、占用存储空间
2、io次数增加,程序运行速度变慢(最致命)
在unicode二进制数据存入硬盘的时候,做优化
utf-8:
utf-8只与unicode有对应关系
unicode transformation format
所有的英文字符用1个bytes表示
所有的中文字符用3个bytes表示
现在的计算机:
内存都是:unicode
硬盘都是:utf-8
三、结论
需要掌握:
1、用户无论输入什么字符,存入内存,unicode都可以兼容
2、硬盘中无论是什么编码的文件,读到内存,都可以兼容unicode
数据的传输:
优先以自己的本国字符编码进行传递
必须掌握(******)#五星级
(内存)unicode二进制字符 >>> 编码(encode) >>> (硬盘)utf-8二进制字符
(硬盘)utf-8二进制字符 >>> 解码(decode) >>> (内存)unicode二进制字符
(******)
保证不乱码核心:
用什么编码存的数据,就用什么编码取
python2 :
默认的字符编码ascii码(因为当时的unicode还没盛行)
python3:
默认的字符编码utf-8
文件头:
# coding:utf-8
用英文字符,是为了让所有的计算机都可以识别
pycharm默认的字符编码是:
utf-8
windows操作系统默认字符编码:
gbk
四、深浅拷贝
import copy
l1 = [257, 'a', [4, 5, 6]]
print(l1)
print(id(l1))
# print(id(l1[0]))
l2 = copy.deepcopy(l1) # [1, 'a', [4, 5, 6]]
l2[2][0] = 4444
print(l2)
print(id(l2))
print("l1:", l1)
print("id_l1:", id(l1))
这里只需要了解即可,结论就是:
浅copy只是把大框架拿了过来,,而里面的值还是与原来一样,即ID也一样,若改变大框架里面的小列表中的值,copy后小列表中的ID以及原小列表的ID都会改变。
深copy就是不止把大框架拿了过来,而把小框架里的东西都拿了过来,改变小列表中的值,这个小列表的ID会变,而原小列表ID不变。
五、文件处理
1、什么是文件?
操作系统给你提供操作硬盘的一个工具
2、为什么要用文件?
为了满足人类和计算机永久保存数据
3、怎么用文件?
相对路径:必须与当前文件在同一目录
绝对路径:固定的只能在这台电脑操作
4、常用的字符意愿
'r' 以只读方式打开文件(默认)
'w' 以写入的方式打开文件,注意会已存在的文件,即将已有的文件删除
'x' 如果文件已存在,用此方式打开会发生异常
'a' 以写入的方式打开,如果文件存在,会在末尾追加写入
'b' 以二进制打开,主要用于图片,视频
't' 以文本的方式打开
'+' 可以将r+w变成可读写模式
'u' 通用换行符
5、文件处理
f = open("a.txt")
print(f.readable()) # 判断当前文件是否可读
print(f.writable()) # 判断当前文件是否可写
# del f # 回收变量资源
f.close() # 回收操作系统的资源
with open('a.txt',mode='r')as rf, open('a.txt',mode='w')as wf: # with会自动帮你回收操作系统的资源,无需自己操作
print(rf.readable())
print(wf.writable())
# r进行转义
with open(r'D:\项目路径\python13期\day07\a.txt')as f:
print(f.read()) # 读取文件
6、文件处理模式
with open(r'th.jpg', mode='rb')as rf, open('xiawuchameilv.png', mode='wb')as wf:
xiawuchameilv = rf.read()
wf.write(xiawuchameilv)
"""
打开文件的三种模式:
r :
1、只读
2、如果文件不存在,会报错
w:(慎用)
1、只写
2、如果文件不存在,则新建一个文件写入数据
3、如果文件内存在数据,会将数据清空,重新写入
a:
1、追加写
2、如果文件内存在数据,会在已有数据的后面追加数据
3、如果文件不存在,则新建一个文件写入数据
处理文件的模式:
t
b
"""
7、文件打开模式
with open(r'a.txt', 'r', encoding='utf-8')as f:
print(f.readable())
print(f.read())
print(f.readline()) # 执行一次,打印一行内容
print(f.readlines())
print(f.read())
print(f.readable())
print(f.read())
>>>True
亚峰666
[]
True
with open(r'b.txt', 'w', encoding='utf-8')as f:
f.writelines(["干巴爹\n",'加油'])
>>>干巴爹
加油
with open(r'aaaaa.txt','a',encoding='utf-8')as f:
print(f.writable())
f.write("\n努力,奋斗")
>>>努力,奋斗
原文地址:https://www.cnblogs.com/yafeng666/p/11814109.html
时间: 2024-11-09 09:12:18