2022年python的中文处理 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年python的中文处理 .pdf》由会员分享,可在线阅读,更多相关《2022年python的中文处理 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Python 的中文处理一、使用中文字符在 python 源码中如果使用了中文字符,运行时会有错误,解决的办法是在源码的开头部分加入字符编码的声明,下面是一个例子: #!/usr/bin/env python # -*- coding: cp936 -*- Python Tutorial 中指出, python 的源文件可以编码ASCII 以外的字符集,最好的做法是在#!行后面用一个特殊的注释行来定义字符集:# -*- coding: encoding -*- 根据这个声明,Python 会尝试将文件中的字符编码转为encoding 编码,并且,它尽可能的将指定地编码直接写成Unicode 文
2、本。注意, coding:encoding 只是告诉Python 文件使用了encoding 格式的编码,但是编辑器可能会以自己的方式存储.py 文件,因此最后文件 保存 的时候还需要编码中选指定的ecoding才行。二、中文字符的存储 str = u 中文 str uxd6xd0 xcexc4 str = 中文 str xd6xd0 xcexc4 u中文 只是声明unicode,实际的编码并没有变。这样子就发生变化了: str = 中文 str xd6xd0 xcexc4 str = str.decode(gb2312) str uu4e2du6587 更进一步: s = 中文 s.deco
3、de(gb2312) uu4e2du6587 len(s) 4 len(s.decode(gb2312) 2 s = u中文 1名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - len(s) 4 s = 中文 test len(s) 8 len(s.decode(gb2312) 6 s = 中文 test, len(s) 10 len(s.decode(gb2312) 7 可以看出, 对于实际Non-ASCII编码存储的字符串,p
4、ython 可以正确的识别出其中的中文字符以及中文上下文中的标点符号。前缀“ u”表示“后面这个字符串“是一个Unicode 字符串”,这仅仅是一个声明,并不表示这个字符串就真的是Unicode 了;就好比某正太声称自己已满18 岁,但实际上他的真实年龄并不确定,现在体育界年龄造假可不稀罕幺! 那么声明成u 有什么作用呢?对于Python 来说,只要你声明某字符串是Unicode,它就会用Unicode 的一套机制对它进行处理。比方说,做字符串操作的时候会动用到内部的Unicode 处理函数,保存的时候以Unicode 字符(双字节)进行保存。等等。显而易见,对于一个实际上并不是Unicode
5、 的字符串,做Unicode 动作的处理,是有可能会出问题的。u前缀只适用于你的字符串常量真的是 Unicode 的情况 。三、中文字符的IO 操作用 python 处理字符串很容易,但是在处理中文的时候需要注意一些问题。比如:a = 我们是 python 爱好者 print a0 只能输出“我”字的前半部分,要想输出整个的“我”字还需要: b = a0:2 print b 才行,很不方便,并且当一段文本中同时有中英文如何处理?最好的办法就是转换为unicode。像这样: c = unicode(a, gb2312) print c0 这个时候c 的下标对应的就是每一个字符,不再是字节, 并且
6、通过len(c)就可以获得字符数!还可以很方便的转换为其他编码,比如转换为utf-8 : d = c.encode(utf-8) 四、 和 2名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 将字符串看作是字节的序列,而则将其看作是字符的序列,单个字符可能占用多个字节;字节相对于字符,其在存储层次中更低一些。str 转换为unicode 要 decode,可以这样想,因为要把字节序列解释成字符序列,字节序列是底层的存放方式,解码(
7、 decode)成更高层的字符以便使用;同理,unicode 转换为str 要 encode,就象信息 编码( encode)后才存储一样: s.decode(encoding) to u.encode(encoding) to 例如: s = str type(s) type(s.decode() s = ustr type(s) type(s.encode() 处理中文数据时最好采用如下方式:1. Decode early(尽早 decode, 将文件中的内容转化成unicode 再进行下一步处理) 2. Unicode everywhere (程序内部处理都用unicode) 3. En
8、code late (最后 encode 回所需的 encoding, 例如把最终结果写进结果文件) 下面是一个简单的演示,用re 库查询一个中文字符串并打印: p = pile(unicode( 测试 (.*), gb2312) s = unicode( 测试一二三 , gb2312) for i in p.findall(s): print i.encode(gb2312) 一二三五、跨平台处理技巧如果一个project 必须在两个平台上开发,程序应该使用同样的encoding,比如要求所有的文件都使用UTF-8 ,如果实在不能统一(一般是为了满足许多所谓专家学者莫名其妙的要求) ,可以退
9、而求其次,用当前系统编码决定文件内的编码: import locale import string import re #根据当前系统的encoding 构造需要的编码取值 lang = string.upper(locale.setlocale(locale.LC_ALL, ) textencoding = None 3名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - #检查编码的值是不是满足我们需要的情况 if re.matc
10、h(UTF-8, lang) != None: # UTF-8 编码textencoding = utf-8 elif re.match(rCHINESE|CP936, lang): # Windows 下的 GB 编码 textencoding = gb18030 elif re.match(rGB2312|GBK|GB18030, lang): # Linux 下的 GB 编码 textencoding = gb18030 else: # 其他情况,抛个错误吧 raise UnicodeError fd = file(filename, r) fulltextlist = fd.readl
11、ines() # 把每一行转换成unicode for each in len(fulltextlist): fulltextlisti = unicode(each, textencoding) fd.close() # 如果要打印的话,可以用text.encode(encoding)来恢复成多字节编码六、异常处理编码 encoding 发生在 Unicode 字符串转换为字节序列时,而解码 decoding 发生在字节序列转换为Unicode 字符串时( encoding always takes a Unicode string and returns a bytes sequence,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年python的中文处理 2022 python 中文 处理
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内