我对多索引列名有疑问。我正在使用XLRD使用json.dumps
将excel数据转换为json,但是相反,它仅给我一行列名称。我已经阅读了有关多层json的信息,但我不知道如何使用XLRD来实现。
Here is my sample of table column name
代码示例:
for i in path:
with xlrd.open_workbook(i) as wb:
print([i])
kwd = 'sage'
print(wb.sheet_names())
for j in range(wb.nsheets):
worksheet = wb.sheet_by_index(j)
data = []
n = 0
nn = 0
keyword = 'sage'
keyword2 = 'adm'
try:
skip = skip_row(worksheet, n, keyword)
keys = [v.value for v in worksheet.row(skip)]
except:
try:
skip = skip_row2(worksheet, nn, keyword2)
keys = [v.value for v in worksheet.row(skip)]
except:
continue
print(keys)
for row_number in range(check_skip(skip), worksheet.nrows):
if row_number == 0:
continue
row_data = {}
for col_number, cell in enumerate(worksheet.row(row_number)):
row_data[keys[col_number]] = cell.value
data.append(row_data)
print(json.dumps({'Data': data}))
哦,每个工作表在列名之前都有不同的编号要跳过,所以这就是我的代码具有跳过行功能的原因。在我跳过该行并找到我的列名的确切位置之后。然后,我开始读取值。但是是的,从我的角度来看,问题出在哪里,因为我有两行列名。而且仍然混淆如何使用XLRD做多级json或至少使用XLRD加入列名(我想不能)。
所需结果多层json:
{ "Data":[{ "ID" : "997", "Tax" : [{"Date" : "9/7/2019", "Total" : 2300, "Grand Total" : 340000"}], "Tax ID" : "ST-000", .... }]}
pss://我尝试使用熊猫,但是由于我使用大数据,这给我带来了很多麻烦。
您可以在熊猫中使用多重索引,首先需要获取每张纸的标题行索引。
header_indexes = get_header_indexes(excel_filepath, sheet_index) #returns list of header indexes
您需要编写get_header_indexes
函数来扫描工作表并返回标头索引。
您可以使用panda从数据框中获取JSON。
import pandas as pd
df = pd.read_excel(excel_filepath, header=header_indexes, sheet_name=sheet_index)
data = df.to_dict(orient="records")
对于多个标头data
包含字典列表,每个字典都有元组作为键,您可以根据需要将其重新格式化为最终JSON。
注意:使用chunksize
读取大文件。