字符编码
字符编码
什么是字符编码 ?
由于计算机内部只能识别二进制。
但是用户在使用计算机时,却可以看到各式各样的语言字符。
字符编码:内部记录了人类字符与数字对应关系的数据。
( 只根文本文件和字符串有关 ) 。
字符串编码发展史
1. 一家独大 >>> 2.群雄割据 >>> 3.一统天下
1. 计算机由美国人发明,为了能让计算机识别英文,美国人发明了ASCII
ASCII码中记录了英文字符与数字的对应关系,用一个字节一个字节表示。1bytes
所有的英文字符和符号加起来不超过127个,使用八进制是为了后续发现新的语音留有余地。
需要记住的对应关系是 A-Z:65-90 a-z:97-122
2.中国:为了让计算机识别中文,我们需要发明另一套编码表。
我国发明了GBK码:记录了英文中文与数字的对应关系。
对于英文还是使用一个字节;对于中文要使用两个甚至更多字节。2bytes,3bytes
日本:为了让计算机识别日文,也需要发明一套编码表。
shift_JIS码:记录日文与英文与数字的对应关系。
韩国:为了让计算机识别韩文,也需要发明一套编码表。
Euc_kr码:记录韩文英文与数字的对应关系。
3.一统天下
为了实现国家与国家之间的文本数据可以无障碍交流,需要统一编码
出现了unicode(万国码):统一使用两个及以上的字符记录与数字的对应关系。
utf8(万国码的优化版):将英文还是以1bytes储存,中文以3bytes或更多储存。
""" 现在默认使用的是utf8 """
字符编码实操
1.如何解决乱码情况
文件以什么编码编的,就规定以什么编码打开。
如果使用不当,会出现乱码。
2.python解释器版本不同的编码差异
python2.x 内部的编码使用默认编码是ASCII
使用 coding:utf8 更改成utf8可使用的模式
一定要在定义内容前加小u
python3.x 内部使用utf8
修改自定义文本版本内容如下:
3.编码与解码
编码:将人类能够读懂的字符,安装的指定编码转成数字 (.encode)
解码:将数字按指定的编码转化为人类的字符。(.decode)
文件操作
1.什么是文件?
文件就是操作系统展示给用户操作硬盘的一个接口。
2.代码如何操控文件
关键字:open()
1.利用open打开文件
"""
文件路径,读写模式,字符编码
文件路径与读写模式是必须的
字符编码是可选的(有些模式需使用到编码)
"""
2.利用其他方法操控文件
3.关闭文件
关闭文件除了使用.close( ) ,还可以使用with
with上下文管理(能够自动帮你close( ) )
with open(r'1.txt','r',encoding='utf8') as f1:
pass (用于补全语法结构,没有特殊意义)
"""以后代码操作文件 推荐使用with语法"""
"""
文件路径
相对路径与绝对路径
路径中出现了字母与斜杠的组合产生了特殊含义如何取消
在路径字符串前面加一个r
r'D:\py20\day08\a.txt'
"""
文件读写模式
pass :补全语法结构,没有实际含义
... : 也是补全语法结构,没有实际含义
(不推介使用,代码中会有很多 . 号 会看不清)
r : 只读模式
读文件,路径不存在时 直接报错
文件存在时,读取内容 (.read)
w :只写模式
路径不存在时,自动创建
路径存在时,会清空原内容后再执行 (.write)
a :只追加模式
可读,路径不存在时,自动创建
路径存在时,则在最后添加内容
小结:r 、w 、a 读写模式只能操作文本文件。
文件操作方式:
# 1.读系列 with open(r'a.txt', 'r', encoding='utf8') as f: print(f.read()) # 一次性读取文件内所有 """ 1.一次性读完之后 光标停留在了文件末尾 就无法再次读取内容 2.该方法在读取大文件的时候 可能会造成内存溢出的情况 解决上述问题的策略就是 逐行读取文件内容 """ print(f.readline()) # 每次只读文件一行内容 print(f.readlines()) # 读取文件所有的内容 组织成列表 每个元素是文件的每行内容 print(f.readable()) # 判断当前文件是否具备读的能力 # 2.写系列 with open(r'a.txt','w',encoding='utf8') as f: f.write('好好学习,天天向上!') # 往文件内写入文本内容 # f.write(123) # 写入的内容必须是字符串类型 f.writelines(['jason','kevin','tony']) # 可以将列表中多个字符串元素全部写入 print(f.writable()) # True 判断文件是否可写 print(f.readable()) # False 判断文件是否可读 # f.flush() # 直接将内存内文件数据刷到硬盘 相当于ctrl+s
''' 涉及到多行文件内容的情况一般都是采用for循环读取 '''
文件操作模式:
t 文本模式
1.默认的模式
r w a >>> rt wt at
2.该模式所有操作都是以字符串基本单位(文本)
3.该模式必须要指定encoding参数
4.该模式只能操作文本文件
b 二进制模式
1.该模式可以操作任意类型的文件
2.该模式所有操作都是以bytes类型(二进制)基本单位
3.该模式不需要指定encoding参数
rb wb ab
(二进制的读写模式操作与文本模式操作大致一致)
二进制模式的读写操作。
可读模式为:rb (英文字符以1bytes表示,中文以3bytes表示。)
做一个简易版本的拷贝功能需要:
1.获取拷贝的文件路径
2.获取新的文件路径
3.利用文件操作实现
文件内光标移动
.tell 查看光标移动了多少字节
.decode( ) 在文件内写入对应的编码表,进行翻译
.seek( ) 控制文件内光标的移动
.replace 替换
.seek(offset,whence): offset表示位移量
始终是以字节为最小单位
正数从左往右移动
负数从右往左移动
whence表示模式
0: 以文件开头为参考系(支持tb两种模式)
1: 只支持b模式 以当前位置为参考系
2: 只支持b模式 以文件末尾为参考系
文件的内容修改