2013-07-04 65 views
3

按照XLRD模块的文档,的Python xlrd模块

row_values(rowx, start_colx=0, end_colx=None) 

“返回给定行中的单元格的值的切片”。

并给予下述的Python代码:

import xlrd 
wb=xlrd.open_workbook("xl1.xlsx") 
sh = wb.sheet_by_index(0) 
for rownum in range(sh.nrows): 
    print sh.row_values(rownum) 

的输出是:

[12.0, u'test.0'] 
[34.0, u'te.st'] 
[u'test123', u'12.test'] 

和EXEL文件保存以下数据:

12.0,test.0,34.0, te.st,test123,12.test

那么,我能得到什么类型的数据结构呢?根据输出? 它不是一个元组,(因为当打印一个元组类型时,没有u'作为字符串的前缀),那么u'的含义是什么? 而且它也像我们在数据结构中有两种类型的数据 - int和“non int”。 这是真的吗?在文档中找不到关于此的任何信息。 谢谢!

+0

带'u'前缀的字符串是unicode字符串。只要忽略'u'。 – Blender

+0

因此,excel文件中的每一行只包含int或字符串,对吗? – user2162550

+0

@ user2162550查看已更新的答案 – alecxe

回答

2

row_values返回具有适当数据类型的单元值列表。列表中每个项目的数据类型取决于源Excel文件中的单元格类型。

有可能是项目只有stringfloatint数据类型,请参阅本mapping table(发现那里Cell文档)以获取更多信息。

u只是表示这是一个unicode字符串。 Documentation解释得很好。

希望有所帮助。

0

第一件事第一!
我不知道你正在使用,但根据(在写这个答案的时间xlrd 0.9.4)的最新版本,xlrd的版本:

row_values() 

将与值返回你的行中以列表的形式。这可以通过打字进行验证:

>>> type(sh.row_values(2)) 
<type 'list'> 

下获得该行包括数据类型的值,您可以键入以下内容:

>>> sh.row(2) 

将返回你是这样的:

[number:12.0, text:u'test.0'] 

这意味着列表中的第一项是一个数字,第二项是一个字符串或也称为文本。

最后在字符串前面的u表示它是Unicode编码。请记住,xlrd模块将尝试在Excel工作表中的每一个数据渲染到Unicode编码,所以你看到u 来源:Radius Of Circle
Encoding used by xlrd
Difference between row_values() & row()
Unicode in python
xlrd module official documentation

希望这将帮助你。 :)