codecs专门用作编码转换,当我们要做编码转换的时候可以借助codecs很简单的进行编码转换
codecs模块提供一个open方法,三个参数encoding, errors, buffering,这三个参数都是可选参数,但是对于应用来说,需要明确指定encoding的值,而errors和buffering使用默认值即可。使用方法如下:
import codecs
# 从文件读取数据
data = codecs.open("2.txt", encoding="UTF-8")
# 一行一行读取数据
data1 = data.readline()
print(data1)
# 读取完数据要把数据对象进行关闭,从内存里面释放出来
data.close()
一、常用函数
1、codecs.open()
codecs.open(filename, mode='r', encoding=None, errors='strict', buffering=1)
使用给定的 mode 打开已编码的文件并返回一个 StreamReaderWriter的实例,提供透明的编码/解码;与内置函数open类似。
常用的errors字符串
errors字符串 | 描述 |
---|---|
strict | 默认,出现编解码错误抛出UnicodeError |
ignore | 忽略错误格式(编解码出错)的数据 |
replace(仅适用文本编码) | 编码错误替换为 ‘?’ |
注意:文本编码—>用于将Unicode字符串编码为字节串的编码器。
2、codecs.encode()
codecs.encode(obj, encoding='utf-8', errors='strict')
使用为 encoding 注册的编解码器对 obj 进行编码,类似str.encode()方法。
>>> codecs.encode("你好,world",encoding='ascii')
Traceback (most recent call last):
...
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>>
>>> codecs.encode("你好,world",encoding='ascii',errors='replace')
b'??,world'
3、codecs.decode()
codecs.decode(obj, encoding='utf-8', errors='strict')
使用为 encoding 注册的编解码器对 obj 进行解码,类似str.decode()方法。
4、codecs.lookup()
codecs.lookup(encoding)
在 Python 编解码器注册表中查找编解码器信息,并返回一个 CodecInfo
对象。
>>> import codecs
>>>
>>> gbk = codecs.lookup('gbk')
>>> gbk.encode("你好,world")
(b'\xc4\xe3\xba\xc3,world', 8)
>>> codecs.lookup('uuuu')
Traceback (most recent call last):
...
LookupError: unknown encoding: uuuu
CodeInfo对象属性/方法 | 描述 |
---|---|
name | 编码名称 |
encode/decode | 无状态的编解码函数 |
streamwriter/streamreader | 流式写入器和读取器类或工厂函数。 |
incrementalencoder/incrementaldecoder | 增量式的编码器和解码器类或工厂函数。 |
>>> utf8 = codecs.lookup('utf-8')
>>> utf8.name
"utf-8"
5、codecs.getencoder()
codecs.getencoder(encoding)
查找给定编码的编解码器并返回其编码器函数。
>>> u8_encode = codecs.getencoder("utf8")
>>> u8_encode("你好,world.")
(b'\xe4\xbd\xa0\xe5\xa5\xbd,world.', 9)
参考资料:
python模块之codecs
python :codecs模块简介
python :codecs模块简介
Python标准库—codecs模块
读写文件时codecs.open()优于open()
python codecs.open()及文件操作
WITH OPEN() AS和CODECS.OPEN()