常见编码方式
ascii:总共由包含英文大小写、数字、符号等256个常用英文字符构成。每个字符占1字节。
unicode:万国码。支持所有国家的语言,与所有国家的编码都有映射关系。使用2-4字节存储一个字符,比ascii编码要多一倍。
utf-8:优化了unicode的空间占用。是一种可变长的编码,英文占1字节,西欧字符占2字节,中文占3字节。存储文件或网络发送时使用,但在内存中文件仍以unicode的方式编码。
gbk:为解决汉字的编码而生成的解决方案,英文使用ascii码表示,占一字节;中文用双字节表示,编译时通过字节最高位判断是中文还是英文,最高位为0代英文,为1代表中文。
编码方式的声明:Python2默认ascii编码,Python3默认unicode编码;除了在Pycharm软件上设置更改编码方式外,还可以通过在程序开头添加编码方式的声明来更改编码方式。
声明使用utf-8:
# -*- codeing = utf-8 -*-
声明使用gbk编码:
# coding=gbk
声明使用解释器默认编码:
# encoding = None
总而言之,一般使用utf-8编码。主要面对中文的程序一般使用gbk编码。也可以在程序报错时再决定使用哪种编码。(例如若utf-8报错,则尝试使用gbk)
Python3.8的编码方式与encode、decode
在python3中,默认编码为unicode,由str类型表示。将str类型转换为byte类型的过程称为编码,将byte类型转换为str类型的过程称为解码。参考python3默认编码格式转换_python3默认使用什么编码_weixin_39670627的博客-CSDN博客的代码可以直观地理解编码与解码。
str = "我是Python3.8"
str_utf8 = str.encode('utf-8')
str_gbk = str.encode('GBK')
print(str)
print("UTF-8编码:", str_utf8)
print("---------------------------------------------------")
print("GBK编码:",str_gbk)
print("---------------------------------------------------")
print("UTF-8解码:", str_utf8.decode('utf-8'))
print("---------------------------------------------------")
print("GBK解码:",str_gbk.decode('GBK'))
print("---------------------------------------------------")
# 输出:
# 我是Python3.8
# UTF-8编码: b'\xe6\x88\x91\xe6\x98\xafPython3.8'
# ---------------------------------------------------
# GBK编码: b'\xce\xd2\xca\xc7Python3.8'
# ---------------------------------------------------
# UTF-8解码: 我是Python3.8
# ---------------------------------------------------
# GBK解码: 我是Python3.8
# ---------------------------------------------------
Python的文件处理
文件的基本操作:
# 【打开/创建操作】
# 语法:f = open("文件名","打开模式") #打开/创建文件
#一般模式
f = open("文件名","r") #只读模式
f = open("文件名","w") #创建模式,若文件已存在,覆盖旧文件
f = open("文件名","a") #追加模式,新数据写到文件的末尾
#二进制模式
f = open("文件名","rb") #二进制只读模式
f = open("文件名","wb") #二进制创建模式,若文件已存在,覆盖旧文件
f = open("文件名","ab") #二进制追加模式,新数据写到文件的末尾
#混合模式
f = open("文件名","r+") #读写模式,最常使用
f = open("文件名","w+") #写读模式,不常使用
f = open("文件名","a+") #追加读模式,不常使用
#【写操作】
#一般写操作
f.write("我是野生程序员")
#二进制写操作
f = open("wb_file","wb") #不能直接输入字符串,而应将字符串进行二进制编码
s = "路费"
f.write(s.encode("gbk")) #将s进行gbk编码
#【读操作】
f.read() #读出所有内容
f.readline() #读一行
f.readlines() #每行当作一个元素读,读出时全部排在一行
#P.S.读和写分别有一个光标,二者互不干涉
#【关闭】
f.close() #保存并关闭
#【遍历】
f = open("文件名")
for line in f: #每循环一次读一行
print(line)
其他常用操作:seek tell flush
f = open("文件名")
f.seek(7) # seek - 把操作文件的光标按字节移动到制定位置(每个字符占多少个字节取决于编码方式)
f.tell() # tell - 返回光标所在位置
f.flush() # flush - 把缓存中的数据强制刷新到硬盘上