需要将以下代码的python输出导出为json(key:value)格式文件

时间:2019-02-07 09:29:08

标签: python json excel

我正在从Excel文件中打印列名,数据类型和列的最大长度。

下面是代码和输出,需要将输出导出到json文件。

Excel文件(assignment.xlsx):

<html>
<table >
  <thead>
    <tr>
      <th>Type</th>
      <th>Amount received</th>
      <th>Currency</th>
      <th>Flag</th>
      <th>Date</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Educationsl</td>
      <td>1422.00</td>
      <td>USD</td>
      <td>2018-11-30</td>
    </tr>
  </tbody>
</table>
</html>

输出

Column Name : Type
Data type : String
Size  : 11

Column Name : Amountreceived
Data type : Float
Size  : 6

Column Name : Currency
Data type : String
Size  : 3

Column Name : Flag
Data type : String
Size  : 1

Column Name : Date
Data type : Float
Date format  : ddmmyyyy

代码

import string
import re
import datetime
import xlrd
loc = r"C:\Users\Documents\PythonStuff\assignment.xlsx"
wb = xlrd.open_workbook(loc)
sheet = wb.sheet_by_index(0)

for i in range(sheet.ncols):
    print ("Column Name : " + re.sub('[^A-Za-z0-9]+', '', sheet.cell_value(0, i).replace(' ','_')))
##Data Type
    if str(sheet.cell_type(1,i)) == '1':
        print  ("Data type : String ")
    elif isinstance(sheet.cell_value(1,i), float) == True:
        print  ("Data type : Float ")
    elif str(sheet.cell_type(1,i)) =='3':
        print  ("Data type : Date ")
## Date Format
    if str(sheet.cell_type(1,i)) =='3':
        print ("Date format  : " + "ddmmyyyy" +"\n ")
    else:
        print ("Size  : " + str(len (str(sheet.cell_value(1,i))))+"\n ")

所需的输出

{"Excel": [{"Type": "Educational", "Amount received": "1422.00", "Currency": "USD", "Flag": "N", "Date": "2018-11-30"} ]}

1 个答案:

答案 0 :(得分:0)

我假设您要使用第一行的值作为dict键,并且每一行都是列表中的一项。将此添加到您的代码中:

keys = [i.value for i in sheet.row(0)]
sheet_dict = {'Excel': list()}

for row in range(1, sheet.nrows):
    row_dict = {}
    for col in range(sheet.ncols):
        row_dict[keys[col]] = sheet.cell_value(rowx=row, colx=col)
    sheet_dict['Excel'].append(row_dict)

print(sheet_dict)

或者如果您想要漂亮的输出:

import json
print(json.dumps(sheet_dict, sort_keys=True, indent=4))