Python - 从Excel中读取并存储中文字符

0 投票
2 回答
842 浏览
提问于 2025-04-17 12:18

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

我不太明白为什么当我把值存储到列表里时,它们会被转换成其他形式:

代码:

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

    print Temp

输出:

u'\u8bbe\u5168\u96c6\u662f\u5b9e\u6570\u96c6R\uff0cM= {x|-2<=x<=2}\uff0cN{x|x<1}\uff0c\u5219bar(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 个回答

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

这些值应该是一样的,只是显示的方式不同。

>>> 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字符串会先被转换成字节)。

撰写回答