Python - 存储从excel读取的中文字符

时间:2012-02-04 07:42:03

标签: python cjk xlrd

我正在尝试使用xlrd读取excel表,但是我在存储中文字符时遇到了一些问题。

当我将它存储在列表中时,我不确定为什么值会被翻译:

代码:

for rownum in range(sh.nrows):
    Temp.append(sh.row_values(rownum))  

    print Temp

输出

  

u'\ u8bbe \ u5168 \ u96c6 \ u662f \ u6570 \ u96c6R \ uff0c M= {x|-2<=x<=2} \ uff0c N{x|x<1} \ uff0c \ u5219 bar(M) nn N \ u7b49 \ u4e8e

\ n [A] \ uff1a {x|x<-2}

[B] \ uff1a {x|-2<1}

[C] \ uff1a {x|x<1}   

[d] \ uff1a {x|-2<=x<1}

但是,当我打印出单个单元格值时,它们会按照Excel工作表正确打印出来:

代码:

 cell_test = sh.cell(1,3).value
 print cell_test

输出

  

设全集是实数集R,M={x|-2<=x<=2}N={x|x<1},则bar(M) nn N等于

  [A]:{x|x<-2}

[B]:{x|-2<1}

[C]:{x|x<1}   

[d]:{x|-2<=x<1}

如何让Python以上述数据存储上述数据?

谢谢!

2 个答案:

答案 0 :(得分:2)

首先。您的XSL解析器似乎返回unicode值。

二。当您执行print some_complex_object(就像执行print Temp)时,Python通常会在该对象的元素上输出repr函数的结果。当你print repr(some_unicode_string)时,通常的输出就像u'\u8bbe\u5168\u96c6\u662f'

第三。存储值没有任何问题 - 它们被正确存储,您只是在打印时遇到问题。尝试类似:

for i in Temp:
    print i

答案 1 :(得分:1)

值应该相同。它们的显示方式不同。

>>> s = u'o\ufb03ce'
>>> print s
office
>>> print [s]
[u'o\ufb03ce']
>>> print repr(s)
u'o\ufb03ce'
>>> print '\n'.join([s])
office

此示例显示当您打印列表时,使用repr()函数显示单个项目,但字符串按原样显示(unicode字符串首先编码为字节)。