python codecs_python模块之codecs

python 模块codecs

python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。

有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码,转换过程是这样的:

原有编码 -> 内部编码 -> 目的编码

python的内部是使用unicode来处理的,但是unicode的使用需要考虑的是它的编码格式有两种,

一是UCS-2,它一共有65536个码 位,

另一种是UCS-4,它有2147483648g个码位。

对于这两种格式,python都是支持的,这个是在编译时通过--enable- unicode=ucs2或--enable-unicode=ucs4来指定的。

那么我们自己默认安装的python有的什么编码怎么来确定呢?有一个 办法,就是通过sys.maxunicode的值来判断:

None.gifimport sys

None.gifprint sys.maxunicode

如果输出的值为65535,那么就是UCS-2,如果输出是1114111就是UCS-4编码。

我们要认识到一点:当一个字符串转换为内部编码后,它就不是str类型了!它是unicode类型:

None.gif a = " 中文 "

None.gif print type(a)

None.gif b = a.unicode(a, " gb2312 " )

None.gif print type(b)

输出:

这个时候b可以方便的任意转换为其他编码,比如转换为utf-8:

None.gifc = b.encode( " utf-8 " )

None.gifprint c

c输出的东西看起来是乱码,那就对了,因为是utf-8的字符串。

好了,该说说codecs模块了,它和我上面说的概念是密切相关的。codecs专门用作编码转换,当然,其实通过它的接口是可以扩展到其他关于代码方面 的转换的,这个东西这里不涉及。

# -*- encoding: gb2312 -*-

import codecs, sys

print ' - ' * 60

# 创建gb2312编码器

look = codecs.lookup( " gb2312 " )

# 创建utf-8编码器

look2 = codecs.lookup( " utf-8 " )

a = " 我爱北京 "

print len(a), a

# 把a编码为内部的unicode, 但为什么方法名为decode呢,我 的理解是把gb2312的字符串解码为unicode

b = look.decode(a)

# 返回的b[0]是数据,b[1]是长度,这个时候的类型是unicode 了

print b[ 1 ], b[0], type(b[0])

# 把内部编码的unicode转换为gb2312编码的字符 串,encode方法会返回一个字符串类型

b2 = look.encode(b[0])

# 发现不一样的地方了吧?转换回来之后,字符串长度由14变为了7! 现在 的返回的长度才是真正的字数,原来的是字节数

print b2[ 1 ], b2[0], type(b2[0])

# 虽然上面返回了字数,但并不意味着用len求b2[0]的长度就是7了, 仍然还是14,仅仅是codecs.encode会统计字数

print len(b2[0])

上面的代码就是codecs的使用,是最常见的用法。另外还有一个问题就是,如果我们处理的文件里的字符编码是其他类型的呢?这个读取进行做处理也需要特 殊的处理的。codecs也提供了方法.

None.gif# -*- encoding: gb2312 -*-

None.gif import codecs, sys

None.gif

None.gif #用codecs提供的open方法来指定打开的文件的语言编码,它会在读 取的时候自动转换为内部unicode

None.gif bfile = codecs.open( " dddd.txt " , ' r ' , " big5 " )

None.gif # bfile = open("dddd.txt", 'r')

None.gif

None.gif ss = bfile.read()

None.gif bfile.close()

None.gif # 输出,这个时候看到的就是转换后的结果。如果使用语言内建的open函数 来打开文件,这里看到的必定是乱码

None.gif print ss, type(ss)

上面这个处理big5的,可以去找段big5编码的文件试试。

------------------------------------------------------------------------------------------------------------------------------------------------------

字符的编码是按照某种规则在单字节字符和多字节字符之间进行转换的某种方法。从单字节到多字节叫做decoding,从多字节到单字节叫做 encoding。在这些规则中经常用到的无非是UTF-8和GB2312两种。

在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和 Decoder工厂函数(Factory function),以及StreamReader、StreamWriter和StreamReaderWriter类。

使用“import codecs”导入codecs模块。

codecs模块中重要的函数之一是lookup,它只有一个参数encoding,指的是编码方式的名称,即utf-8或者gb2312等等。如下示例:

>>> import codecs

>>> t = codecs.lookup("utf-8" )

>>> print t

(, , , )

>>> encoder = t[0]

>>> decoder = t[1]

>>> StreamReader = t[2]

>>> StreamWriter = t[3]

lookup函数返回一个包含四个元素的TUPLE,其中t[0]是encoder的函数引用,t[1]是decoder的函数引用,t[2] 是UTF-8编码方式的StreamReader类对象引用,t[3]是UTF-8编码方式的StreamWriter类对象引用相信对Python熟悉 的你肯定知道接下来该怎么用它们了。

codecs模块还提供了方便程序员使用的单独函数,以简化对lookup的调用。它们是:

getencoder(encoding)

getdecoder(encoding)

getreader(encoding)

getwriter(encoding)

如果我们只是想获取一种utf-8编码的encoder方法,那么只需要这样做:

>>> encoder = codecs.getencoder("utf-8" )

另外,对于StreamReader和StreamWriter的简化, codecs模块提供一个open方法。相对于built-in对象File的open方法,前者多了三个参数encoding, errors, buffering。这三个参数都是可选参数,但是对于应用来说,需要明确指定encoding的值,而errors和buffering使用默认值即 可。使用方法如下:

>>> fin = codecs.open("e://mycomputer.txt" , "r" , "utf-8" )

>>> print fin.readline()

这是我的电脑

>>> fin.close()

总结一下,codecs模块为我们解决的字符编码的处理提供了lookup方法,它接受一个字符编码名称的参数,并返回指定字符编码对应的 encoder、decoder、StreamReader和StreamWriter的函数对象和类对象的引用。为了简化对lookup方法的调用, codecs还提供了getencoder(encoding)、getdecoder(encoding)、getreader(encoding)和 getwriter(encoding)方法;进一步,简化对特定字符编码的StreamReader、StreamWriter和 StreamReaderWriter的访问,codecs更直接地提供了open方法,通过encoding参数传递字符编码名称,即可获得对 encoder和decoder的双向服务。

转自:http://blog.csdn.net/suofiya2008/article/details/5579413

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()

codecs模块为我们解决的字符编码的处理提供了lookup方法,它接受一个字符编码名称的参数,并返回指定字符编码对应的 encoder、decoder、StreamReader和StreamWriter的函数对象和类对象的引用。为了简化对lookup方法的调用, codecs还提供了getencoder(encoding)、getdecoder(encoding)、getreader(encoding)和 getwriter(encoding)方法;进一步,简化对特定字符编码的StreamReader、StreamWriter和 StreamReaderWriter的访问,codecs更直接地提供了open方法,通过encoding参数传递字符编码名称,即可获得对 encoder和decoder的双向服务,(本次只介绍open方法的使用)

importcodecs#读取

fw = codecs.open("file_name","r","utf-8",buffering = 1) #buffering 代表缓存的行数

data =fw.read()

fw.close()#写入

fw = codecs.open("file_name","w","utf-8")

fw.write(data)

fw.close()

### 回答1: 你可以使用 `pip` 命令来安装 `codecs` 库。首先,确保你已经安装了 `pip`。如果你使用的是 Python 2,请使用下面的命令安装 `codecs`: ``` pip install codecs ``` 如果你使用的是 Python 3,请使用下面的命令安装 `codecs`: ``` pip3 install codecs ``` 安装完成后,你就可以在你的 Python 程序中使用 `codecs` 库了。你可以在你的程序中使用下面的代码来导入 `codecs` 库: ```python import codecs ``` ### 回答2: 要安装Pythoncodecs模块,可以按照以下步骤进行操作: 1. 首先,确保你已经正确安装了Python解释器。你可以从Python官方网站(www.python.org)上下载并安装最新版本的Python解释器。 2. 确认Python解释器的安装路径是否已经添加到系统的环境变量中。这样才能在任意目录下运行Python命令。 3. 打开命令提示符(Windows)或终端(Mac / Linux),输入以下命令来验证Python是否已成功安装: python --version 如果显示Python的版本信息,表示Python已成功安装并可以使用。 4. 安装Pythoncodecs模块需要使用pip包管理工具。pip是Python的包管理工具,可以用来安装和管理第三方库。 5. 在命令提示符(Windows)或终端(Mac / Linux)中输入以下命令来安装codecs模块: pip install codecs 这将从Python官方的包索引(PyPI)中下载并安装codecs模块。 6. 安装完成后,你可以在Python中导入codecs模块进行使用。在Python的脚本或解释器中使用以下命令: import codecs 这样就可以开始使用codecs模块的各种功能了。 总结起来,安装Pythoncodecs模块需要先安装Python解释器,然后使用pip工具来安装codecs模块。在Python中导入codecs模块后即可使用其提供的功能。 ### 回答3: 安装Python codecs很简单,你可以通过以下几种方法来实现。 1. 使用系统预装的包管理器安装:例如在Ubuntu上使用apt-get命令,在CentOS上使用yum命令,或者在Mac上使用Homebrew等。可以在终端中运行以下命令: ``` sudo apt-get install python-codecs ``` 2. 使用Python内置的包管理工具pip安装:在终端中运行以下命令: ``` pip install codecs ``` 3. 手动安装:可以从Python官方网站(https://www.python.org/downloads/)下载Python的最新版本,然后按照官方的安装说明进行安装。安装完成后,你就可以使用Pythoncodecs模块了。 无论使用哪种安装方法,安装完成后你都可以在Python程序中使用codecs模块。例如,可以使用以下代码导入codecs模块: ```python import codecs ``` 之后你就可以使用codecs模块提供的方法和函数来处理各种编码和解码操作了。 希望以上解答对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值