字符编码介绍
我们在电脑上看见的图片,文本等内容在机器里其实就是一些二进制数,按照某种方法来显示字符,比如‘一’用什么来表示,这称之为编码,而将二进制按照某种方法解析显示出来称之为解码。
最开始是由美国提出了 ASCII码 用来表示英文字母以及其他字符,而我们要想用中文交流,也必须开发出能够表示中文的编码,于是GB码,或国标码产生了。
常见字符编码
ASCll码 :一个英文字母占1个字节
BIG5 :使用繁体中文社区中最常用的电脑汉字字符集标准
GBK :该编码几乎涵盖了所有的中文汉字
UNICODE :UNICODE编码又称万国码,几乎包含全世界所有文字
UTF-8 :UTF-8是目前用的最多的编码,是 unicode 的简化
编码与解码
编码
编码就是把人能看懂的文字翻译成机器能看懂的语言
解码就是将计算机能够直接读懂的字符解码成人类能够读懂的字符
编码的语法: encode()
代码示例:
x = '你好'
print(x.encode('utf8'))
输出结果:
b'\xe4\xbd\xa0\xe5\xa5\xbd'
通过encode方法,我们可以指定某种格式来对文字进行编码,上面使用了utf8下
面使用gbk格式来运行
代码示例:
print(x.encode('gbk'))
输出结果:
b'\xc4\xe3\xba\xc3'
我们可以看到同样的文字用不同的标准会有不同的结果。
转换后的结果是bytes类型
解码
解码的语法: decode()
代码示例:
x = b'\xce\xd2\xd5\xe6\xba\xc3\xbf\xb4'
print(x.decode('gbk'))
输出结果:
我真好看
这是用gbk的标准来进行翻译的,若是用别的标准来翻译会出现乱码。
代码示例:
x = '我真好看'
y = x.encode('gbk')
print(y.decode('euc_kr'))
输出结果:
乖廬봤였
'''
python2解释器默认的编码是ASCII码
python3解释器默认的编码是utf8
我们可以在文件头告诉解释器使用指定的编码,例如 coding:utf8 或者美化写
法 -*- coding:utf8 -*-
'''
文件简介
文件就是操作系统暴露给用户可以直接操作硬盘的快捷方式
文件操作的流程:
1.打开文件、创建文件
2.编辑文件内容
3.保存文件内容
4.关闭文件
基本语法
- 语法结构一
必须要使用close关闭文件
f1 = open(file, mode='r', encoding=None)
f1.close()
- 语法结构二
自动关闭文件
with open(file, mode='r', encoding=None) as f:
pass
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
encoding: 一般使用utf8
俩种结构都要用到文件的路径,路径可以分为绝对路径和相对路径,相对路径是当和要打开的文件在同一个目录下的时候可以使用。绝对路径就是文件在计算机的详细地址。
文件的读写
我们可以通过代码对文件进行读写操作
主要有三种模式需要我们熟记的,分别是 r w a
r 模式:(只读)
在此模式下只能对文件进行读的操作,没有写的功能
w 模式:(只写)
在此模式下只能对文件进行写的操作,没有读的功能
而且若是没有该文件,w 模式会创建一个文件,若是有文件,会清空了在写
a 模式:(追加)
在此模式下有对文件进行追加内容的功能。没有文件也会创建一个文件,但
不清空
代码示例:
with open('a.txt','r',encoding='utf8') as f:
print(f.read())
with open('a.txt','w',encoding='utf8') as f:
print(f.write('1'))
with open('a.txt','a',encoding='utf8') as f:
print(f.write('1'))
with 结构可以同时打开多个文件
代码示例:
url = 'F:\桌面\yu.jpg'
with open(url, 'rb') as f:
y = f.read()
print(y)
with open('F:\桌面\y1.jpg', 'wb') as g:
g.write(y)
和下面的代码同个效果
url = 'F:\桌面\yu.jpg'
with open(url, 'rb') as f, open('F:\桌面\y1.jpg', 'wb') as g:
y = f.read()
print(y)
g.write(y)
文件的操作方法
t 模式
是默认的文本模式
该模式下只能操作文本文件
该模式必须指定encoding参数,不指定会使用默认计算机的编码
该模式读写都是以字符串为最小单位
b 模式
二进制模式。
可以操作任意类型的文件
该模式可以操作'任意类型'的文件
'该模式不需要指定encoding参数'
该模式读写都是以bytes类型为最小单位
'其中俩种模式又分为 r w a 模式,也就是 rt wt at 以及 rb wb ab '
r rt
w wt
a at
上面三种在文件的读写中的一样。
rb 不能省略b
wb 不能省略b
ab 不能省略b
b模式下的 r w a 模式不太一样。
代码示例:
with open('a.txt', 'rb') as f:
print(f.read())
此时输出的是
b'\xe4\xbd\xa0\xe7\x9c\x9f\xe5\xa5\xbd\xe7\x9c\x8b'
代码示例:
with open('a.txt', 'wb') as f:
f.write(b'\xe6\x88\x91\xe7\x9c\x9f\xe5\xa5\xbd\xe7\x9c\x8b')
文件内置方法
read() # 一次性读取文件内容
1.执行完之后光标在文件末尾 继续读取没有内容
2.当文件内容特别大的时候 容易造成内存溢出(满了)
readline() # 一次只读一行内容
readlines() # 结果是一个列表 里面的各个元素是文件的一行行内容
readable() # 判断当前文件是否可读
支持for循环 # 逐行读取文件内容(推荐使用)内存中同一时刻只会有一行内容
write() # 写入文件内容(字符串或者bytes类型)
writelines() # 可以将列表中多个元素写入文件
writable() # 判断文件是否可写
flush() # 相当于主动按了ctrl+s(保存)
seek() # 用于移动文件读取指针到指定位置。
read()
read()
此方法没有指定参数时,会读出文件所有的内容,我们可以给他一个参数让他返回
指定的内容
下列代码中的 shiyan.txt 中含有文字 : abc今天的天气真热
代码示例:('在文本模式下,括号内的数字表示为读取N个字符')
with open('shiyan.txt', 'r', encoding='utf8') as f:
print(f.read(1))
输出结果:
会将shiyan.txt文件中的第一个字读出来,也就是 a
代码示例:('二进制模式下,括号内的数字表示的是读取指定的字节数')
with open('shiyan.txt', 'rb') as f:
print(f.read(6).decode('utf8'))
输出结果:
会将shiyan.txt文件中的 abc今 读出来,因为在 utf8 中,中文
用3个字节表示,英文用1个字节表示,所以我们指定6个字节时,会输
出3个英文1个中文
seek() 改变光标
seek() 方法语法如下:
fileObject.seek(offset[, whence])
offset 是表示需要移动的'字节数',默认从后移动,负数向前移动。
whence 只有 3 个参数,分别为 0,1,2 。默认为 0
0 代表从文件开头开始算起,
1 代表从当前位置开始算起,
2 代表从文件末尾算起。
也就是光标在某一个位置向前或向后移动指定的'字节数'
我们打开文件调用read()后,文件的所有内容被读取,此时光标就在文本的尾部
我们可以通过 seek() 方法来改变光标到位置。
代码示例:(文本状态下)
文件 shiyan.txt 中含有文字: abc今天的天气真热
with open('shiyan.txt', 'r' ,encoding='utf8') as f:
print(f.read())
print(f.read())
执行完第一个read之后光标就在文本的尾部了,所以第二个read是读不出数
据的。
当我们使用 seek() 后
with open(r'shiyan.txt', 'r', encoding='utf8') as f:
print(f.read())
f.seek(3, 0)
print(f.read())
光标重新回到开头,并向后偏移3个'字节',所以第二个read的是除去首位3个剩
下的,在文本模式下移动光标到尾部有可能报错,在二进制下的话都可以。
代码示例一:(二进制状态下)
文件 shiyan.txt 中含有文字: abc今天的天气真热
with open(r'shiyan.txt', 'rb') as f:
print(f.read(6).decode('utf8'))
f.seek(3, 0)
print(f.read().decode('utf8'))
输出结果:
abc今
今天的天气真热
此时光标回到头部并向右偏移3个字节。
'在二进制状态下,中文对应3个字节,光标也可以改变到任意位置'
代码示例二:(光标对应末尾)
with open(r'shiyan.txt', 'rb') as f:
print(f.read(6).decode('utf8'))
f.seek(-3, 2)
print(f.read().decode('utf8'))
输出结果:
abc今
热
此时光标回到尾部并向左偏移3个字节。
代码示例三:(光标对应当前位置)
with open(r'shiyan.txt', 'rb') as f:
print(f.read(3).decode('utf8'))
f.seek(-3, 1)
print(f.read().decode('utf8'))
输出结果:
abc
abc今天的天气真热
示例三中,首先读取了3个字节,光标在当前位置下向前偏移3个字节,相当于回到
了开头。