这是python编程的问题。
我正在尝试通过从excel导入数据来构建一个字典来进行分析。
我的字典结构是:
dict = { sheet_name :
{label_name1 : [['datatype'],['','',some_data.....]],
label_name2 : [['datatype'],['','',some_data.....]],
...
}
sheet_name1 :
{label_name3 : [['datatype'],['','',some_data.....]],
label_name4 : [['datatype'],['','',some_data.....]],
...
}
}
现在我使用xlrd来处理读数据。
file = xlrd.open_workbook(filename)
table_names = file.sheet_names()
label = sum([file.sheet_by_name(names).row_values(0) for names in
table_names], [])
SHEET_DICT = {names: {labels: [['unknown_datatype'],
file.sheet_by_name(names)\
.col_values(i for i \
in file.sheet_by_name(names).ncols))]
for labels in label}
for names in table_names }
我收到错误消息:
回溯(最近一次调用最后一次):文件" C:/Users/panze/PycharmProjects/Harvest/main.py",第92行,在 test = read_excel(EXCELFILE)File" C:/Users/panze/PycharmProjects/Harvest/main.py" ;,第73行,in read_excel 对于table_names中的名称}文件" C:/Users/panze/PycharmProjects/Harvest/main.py" ;,第73行,在 table_names中的名称}文件" C:/Users/panze/PycharmProjects/Harvest/main.py" ;,第72行,in 标签中的标签}
TypeError:' int'对象不可迭代
> file.sheet_by_name(names).col_values(0) is right
> file.sheet_by_name(names).col_values(1) is right
当我尝试使用变量时
file.sheet_by_name(names).col_values(i for i in range(29))
这是错误的。
然而我需要它可迭代,以便我可以建立一个正确的词典。
还有其他办法吗?
我真的要用dict理解来做这种方式...
感谢您的帮助
答案 0 :(得分:1)
根据the docs:
col_values(colx, start_rowx=0, end_rowx=None)
返回给定列中单元格值的切片。
所以,你不能传递像i for i in range(29)
这样的迭代(顺便说一下,这只是一种更简洁,更慢的方式来获得与range(29)
相同的值),你传递一个列号,开始行和结束行。
如果您想获得第0列,第1列,第2列等的列表,您可以这样做:
[file.sheet_by_name(names).col_values(i) for i in range(29)]
如果您正在尝试仅为特定行获取第0列,第1列等的列表,则可以使用row_values
函数,传递行号,然后是开始和结束专栏。