python的中文处理_python中文处理

Python的中文处理

一、使用中文字符

在python源码中如果使用了中文字符,运行时会有错误,解决的办法是在源码的开头部分加入字符编码的声明,下面是一个例子:

#!/usr/bin/env python

# -*- coding: cp936 -*-

Python Tutorial中指出,python的源文件可以编码ASCII以外的字符集,最好的做法是在#!行后面用一个特殊的注释行来定义字符集:

# -*- coding: encoding -*-

根据这个声明,Python会尝试将文件中的字符编码转为encoding编码,并且,它尽可能的将指定地编码直接写成Unicode文本。

注意,coding:encoding只是告诉Python文件使用了encoding格式的编码,但是编辑器可能会以自己的方式存储.py文件,因此最后文件保存的时候还需要编码中选指定的ecoding才行。

二、中文字符的存储

>>> str = u"中文"

>>> str

u'/xd6/xd0/xce/xc4'

>>> str = "中文"

>>> str

'/xd6/xd0/xce/xc4'

u"中文"只是声明unicode,实际的编码并没有变。这样子就发生变化了:

>>> str = "中文"

>>> str

'/xd6/xd0/xce/xc4'

>>> str = str.decode("gb2312")

>>> str

u'/u4e2d/u6587'

更进一步:

>>> s = '中文'

>>> s.decode('gb2312')

u'/u4e2d/u6587'

>>> len(s)

4

>>> len(s.decode('gb2312'))

2

>>> s = u'中文'

>>> 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编码存储的字符串,python可以正确的识别出其中的中文字符以及中文上下文中的标点符号。

前缀“u”表示“后面这个字符串“是一个Unicode字符串”,这仅仅是一个声明,并不表示这个字符串就真的是Unicode了;就好比某正太声称自己已满18岁,但实际上他的真实年龄并不确定,现在体育界年龄造假可不稀罕幺!

那么声明成u有什么作用呢?对于Python来说,只要你声明某字符串是Unicode,它就会用Unicode的一套机制对它进行处理。比方说,做字符串操作的时候会动用到内部的Unicode处理函数,保存的时候以Unicode字符(双字节)进行保存。等等。显而易见,对于一个实际上并不是Unicode的字符串,做Unicode动作的处理,是有可能会出问题的。u前缀只适用于你的字符串常量真的是Unicode的情况。

三、中文字符的IO操作

用python处理字符串很容易,但是在处理中文的时候需要注意一些问题。比如:

a = "我们是python爱好者"

print a[0]

只能输出“我”字的前半部分,要想输出整个的“我”字还需要:

b = a[0:2]

print b

才行,很不方便,并且当一段文本中同时有中英文如何处理?最好的办法就是转换为unicode。像这样:

c = unicode(a, "gb2312")

print c[0]

这个时候c的下标对应的就是每一个字符,不再是字节,并且通过len(c)就可以获得字符数!还可以很方便的转换为其他编码,比如转换为utf-8:

d = c.encode("utf-8")

四、和

将字符串看作是字节的序列,而则将其看作是字符的序列,单个字符可能占用多个字节;字节相对于字符,其在存储层次中更低一些。

str转换为unicode要decode,可以这样想,因为要把字节序列解释成字符序列,字节序列是底层的存放方式,解码(decode)成更高层的字符以便使用;同理,unicode转换为str要encode,就象信息编码(encode)后才存储一样:

s.decode(encoding) to

u.encode(encoding) to

例如:

>>> s = 'str'

>>> type(s)

>>> type(s.decode())

>>> s = u'str'

>>> type(s)

>>> type(s.encode())

处理中文数据时最好采用如下方式:

1. Decode early(尽早decode, 将文件中的内容转化成unicode再进行下一步处理)

2. Unicode everywhere (程序内部处理都用unicode)

3. Encode late (最后encode回所需的encoding, 例如把最终结果写进结果文件)

下面是一个简单的演示,用re库查询一个中文字符串并打印:

>>> p = re.compile(unicode("测试(.*)", "gb2312"))

>>> s = unicode("测试一二三", "gb2312")

>>> for i in p.findall(s):

print i.encode("gb2312")

一二三

五、跨平台处理技巧

如果一个project必须在两个平台上开发,程序应该使用同样的encoding,比如要求所有的文件都使用UTF-8,如果实在不能统一(一般是为了满足许多所谓专家学者莫名其妙的要求),可以退而求其次,用当前系统编码决定文件内的编码:

import locale

import string

import re

#根据当前系统的encoding构造需要的编码取值

lang = string.upper(locale.setlocale(locale.LC_ALL, ""))

textencoding = None

#检查编码的值是不是满足我们需要的情况

if re.match("UTF-8", lang) != None:

# UTF-8编码

textencoding = "utf-8"

elif re.match(r"CHINESE|CP936", lang):

# Windows下的GB编码

textencoding = "gb18030"

elif re.match(r"GB2312|GBK|GB18030", lang):

# Linux下的GB编码

textencoding = "gb18030"

else:

# 其他情况,抛个错误吧

raise UnicodeError

fd = file(filename, "r")

fulltextlist = fd.readlines()

# 把每一行转换成unicode

for each in len(fulltextlist):

fulltextlist[i] = unicode(each, textencoding)

fd.close()

# 如果要打印的话,可以用text.encode(encoding)来恢复成多字节编码

小结

一个比较一般的Python中文处理的流程:

* 将欲处理的字符串用unicode函数以正确的编码转换为Unicode

* 在程序中统一用Unicode字符串进行操作

* 输出时,使用encode方法,将Unicode再转换为所需的编码

有几点要说明一下:

* 所谓“正确的”编码,指得是指定编码和字符串本身的编码必须一致。这个其实并不那么容易判断,一般来说,我们直接输入的简体中文字符,有两种可能的编码:GB2312(GBK、GB18030)、以及UTF-8

* encode成本地编码的时候,必须要保证目标编码中存在欲转换字符的内码。encode这种操作一般是通过一个本地编码对应Unicode的编码转换表来进行的,事实上每个本地编码只能映射到Unicode的一部分。但是映射的区域是不同的,比如Big-5对应的Unicode的编码范围和 GBK对应的就不一样(实际上这两个编码有部分范围是重叠的)。所以,Unicode的一些字符(比如本身就是从GB2312转换来的那些),可以映射到 GBK,但未必可以映射到Big-5,如果你想转换到Big-5,很有可能就会出现编码找不到的异常。但UTF-8的码表范围实际上和Unicode是一样的(只是编码形式不同而已),所以,理论上来说,任何本地编码的字符,都可以被转换到UTF-8

* GB2312、GBK、GB18030本质上是同一种编码标准。只是在前者的基础上扩充了字符数量

* UTF-8和GB编码不兼容

参考资料

1、[url]http://bbs3.chinaunix.net/thread-1389703-1-2.html[/url]

2、Python的中文处理及其它

[url]http://www.go4pro.org/?p=38[/url]

3、Python处理中文的时候的一些小技巧

[url]http://cocre.com/?p=461[/url]

4、Unicode In Python, Completely Demystified. Kumar McMillan

[url]http://farmdev.com/talks/unicode[/url]

5、python中文处理好方法

[url]http://www.okpython.com/bbs/viewthread.php?tid=311[/url]

6、Python的中文处理

[url]http://hi.baidu.com/mrsz/blog/item/7812a5018c2cf2031d9583d2.html[/url]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Python数据分析(第2版)》是由Wes McKinney著写的一本关于使用Python进行数据分析的书籍,第2版是其中文版本。这本书通过Python语言提供了一种简单、灵活、高效的方式来处理和分析数据。它主要涵盖了数据清洗、数据处理、数据可视化以及数据分析等方面的内容。 这本书的内容主要分为四个部分,分别是“准备工作”、“pandas库入门”、“数据规整化”和“数据分析”的章节。 在“准备工作”部分,作者介绍了Python数据分析的环境设置,包括安装Python和相关的库(如NumPy和pandas)以及说明如何执行示例代码。 “pandas库入门”一章介绍了pandas库的基本概念和常用操作,以及如何读取和处理各种数据格式。 “数据规整化”一章讨论了数据清洗和转换的技术,包括处理缺失值、重复数据以及重新组织数据等内容。 “数据分析”一章是这本书的核心部分,它介绍了如何使用Python进行数据分析,包括数据聚合、分组和透视等常用的数据分析方法。 这本书中通过许多实例和示例代码来演示如何使用Python进行数据分析,帮助读者理解和掌握数据分析的基本方法和技巧。它适合那些对数据分析感兴趣的读者,无论是初学者还是有一定经验的数据分析师。 总的来说,《Python数据分析(第2版)》是一本权威的、实用的关于使用Python进行数据分析的指南,它能够帮助读者快速入门并掌握数据分析的技巧。 ### 回答2: 《Python数据分析(第2版)中文版》是一本介绍使用Python进行数据分析的书籍。该书由Wes McKinney撰写,是第一本详细介绍使用Python进行数据分析的专业书籍。 这本书主要分为8个部分,涵盖了数据分析的基本概念、数据处理、数据可视化、时间序列分析等内容。第一部分介绍了数据分析的基本知识和工具,包括NumPy、Pandas和IPython等库和工具的使用。第二部分介绍了数据的处理和清洗,包括缺失数据的处理、数据合并和重塑等操作。第三部分重点介绍了数据的可视化,包括Matplotlib和Seaborn库的使用,可以帮助读者展示和分析数据。第四部分介绍了数据聚合和分组的方法,包括使用GroupBy、重塑和数据转换等技术。第五部分涵盖了时间序列数据的处理和分析。第六部分介绍了面板数据的处理。第七部分介绍了更高级的数据分析技术,包括移动窗口函数和爬虫技术等。第八部分介绍了常见的数据分析案例,通过实际的案例帮助读者理解和应用所学知识。 《Python数据分析(第2版)中文版》旨在帮助读者使用Python进行数据分析,提供了丰富的工具和案例,可以帮助读者掌握数据分析的基本技巧和方法。此外,该书还提供了在线的资源和教学视频,方便读者进一步学习和应用所学知识。 总之,《Python数据分析(第2版)中文版》是一本内容丰富、实用性强的书籍,对于想要学习和应用Python进行数据分析的读者来说是一本不可多得的工具书。 ### 回答3: 《Python 数据分析》(第二版)是一本讲述使用Python进行数据分析的书籍,由美国著名数据科学家Wes McKinney撰写。该书是McKinney首次出版的同名书籍的中文版,内容涵盖了一系列数据分析常用的Python工具和技术。 《Python 数据分析》(第二版)首先介绍了NumPy和Pandas两个Python数据分析库的基本用法。NumPy是一个强大的数值计算库,能够高效地处理大型数据集,而Pandas是一个建立在NumPy之上的数据分析工具,提供了更高级的数据结构和数据处理功能。 接着,该书讲解了如何使用Pandas进行数据清洗、变形和处理。Pandas提供了DataFrame和Series等数据结构,能够方便地对数据进行处理和操作。读者可以学习如何加载数据、处理缺失值、去重、切片、过滤、合并等操作。 书中还介绍了数据分析中常用的统计分析和可视化工具。读者可以学习如何使用Pandas和Matplotlib库进行数据的统计分析和可视化展示,包括生成各种图表和绘制统计图。 此外,《Python 数据分析》(第二版)还介绍了使用Pandas进行时间序列分析、数据聚合和加工等高级数据处理技术。读者可以学习如何处理时间序列数据、使用分组和聚合函数进行数据分析等。 总体来说,《Python 数据分析》(第二版)是一本很好的Python数据分析入门教程,适合对数据分析感兴趣的初学者。通过学习这本书,读者可以掌握使用Python进行数据分析的基本技能,并能够在实际项目中应用所学知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值