这次看到别人用别的语言抓取excel中的内容,自己也试了一下,昨晚确实遇到了不少问题,首先就是很糟糕,让人很奔溃的编码问题,这也是python中的一个难点吧,目前有很多的编码方式,gbk,utf-8,gb2322,在python中提到unicode,一般指的是unicode对象,例如'哈哈'的unicode对象为u'\u54c8\u54c8'而str,是一个字节数组,这个字节数组表示的是对unicode对象编码(可以是utf-8、gbk、cp936、GB2312)后的存储的格式。这里它仅仅是一个字节流,没有其它的含义,如果你想使这个字节流显示的内容有意义,就必须用正确的编码格式,

python读取excel的内容_ico

对于unicode对象哈哈进行编码,编码成一个utf-8编码的str-s_utf8,s_utf8就是是一个字节数组,存放的就是'\xe5\x93\x88\xe5\x93\x88',但是这仅仅是一个字节数组,如果你想将它通过print语句输出成哈哈,那你就失望了,为什么呢?
因为print语句它的实现是将要输出的内容传送了操作系统,操作系统会根据系统的编码对输入的字节流进行编码,这就解释了为什么utf-8格式的字符串“哈哈”,输出的是“鍝堝搱”,因为 '\xe5\x93\x88\xe5\x93\x88'用GB2312去解释,其显示的出来就是“鍝堝搱”。这里再强调一下,str记录的是字节数组,只是某种编码的存储格式,至于输出到文件或是打印出来是什么格式,完全取决于其解码的编码将它解码成什么样子。
这里再对print进行一点补充说明:当将一个unicode对象传给print时,在内部会将该unicode对象进行一次转换,转换成本地的默认编码

<span style="font-size:18px;">import sys
reload(sys)
sys.setdefaultencoding('gbk')</span>

 

在python中str和unicode在编码和解码过程中,如果将一个str直接编码成另一种编码,会先把str解码成unicode,采用的编码为默认编码,一般默认编码是anscii,所以在
上面示例代码中第一次转换的时候会出错,当设定当前默认编码为'gbk'后,就不会出错了。至于reload(sys)是因为Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入。

 

我只做了读取excel内容,并没有向里面写东西,其实这些也很简单,只要百度一下就可以看到了。今天刚开始弄出来因为在列表里面,所以都以utf-8的形式(汉子的编码)显示的,最后从列表里面读出来,用了两层for循环才读出来了,但是excel里面的内容应该显示字一行,因此各种QQ中问,最后一个“,”解决了问题,还有从excel里面读出的数字和电话号码都是带了.0,然后我看了一下类型,直接加了一下判断,终于好了,成功一步一步走上去,真心不易,但是那种喜悦感只要自己懂

<span style="font-size:18px;">#coding:utf-8
import xlrd
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

data = xlrd.open_workbook("2+2.xls")

table = data.sheets()[0]

nrows = table.nrows

for i in range(nrows):
for j in table.row_values(i):
if type(j) == float:
print int(j),
else:
print j,
print '\n'</span>

 

python读取excel的内容_默认编码_02