2014年7月31日星期四

python处理文件编码

对于存储自然语言的文件,有可能采用了不同的编码,例如汉字的编码就有多种,UTF-8,GB2312,GB18030,ISO-8859等字符编码格式。当处理各种文件的时候,就需要在各种文件格式之间转换,由于UTF-8字符编码格式兼容于ASCII,且多字节编码,不存在大小端的问题,可以使用已有的C语言库字符串处理函数,处理起来较为方便。现在来看看将其他格式(GB2312,GB18030)转换成UTF-8。

  使用python处理文件格式转换,需要使用codecs模块。使用是,先import codecs 。在codecs可以使用open,lookup函数来打开文件。open(filename,mode,encoding,errors,buffering),需要给出filename,mode和encoding,其余的参数有默认值,不用管的。encoding就是要打开的文件的字符编码方式。当从文件读出的内容使用的就是python的内部标示,即unicode标示法。lookup(encoding),返回一个CodecInfo类的实例,encoding是字符编码名称,('utf-8','gb2312')。

  lookup返回值含有相当多的内容,实例中的encode,decode,用来进行格式转换。encode用于将内部的UCS-4转换成调用lookup是给出的encoding格式。decode用于将调用lookup的encoding格式的字符串转换成UCS-4格式的字符串。

  lookup返回的实例中可以使用streamreader,streamwriter两个类,明显reader,writer都是用于按照encoding来读取和写入相应的文件,参数就是一个file-like的对象了。reader是按照encoding从stream读入数据,返回的是unicode字符串。writer将unicode字符串转换成encoding格式写入stream。必须获取streamreader类得一个实例,例如a= x.streamreader(file-object) ,然后就可以使用a来完成相应的读功能。

  在codecs模块中,还有decode和encode两个函数,decode(obj,encoding),这个函数的作用就是将按照encoding编码的obj转换成unicode。encode(obj,encoding),这个函数的作用就是将按照ucs-4编码的obj转换成encoding格式。

  事实上codecs也提供了一些方便的函数,例如'utf_32_be_decode', 'utf_32_be_encode', 'utf_32_decode', 'utf_32_encode', 'utf_32_ex_decode',等等。可以使用严格的decode,encode来完成相同的功能。

没有评论:

发表评论