? ? ? ?在工作中,常常會遇到需要將excel 數據導入到數據庫的場景。為了方便對數據進行清洗并寫入數據庫,所以希望能將每一行的數據以字典的形式存放起來,如同?[ {"id":1, "name": "張三"}, ] 這種形式。
? ? ? ?下面開始介紹如何進行。首先新建一個測試項目,項目中包含一個py 文件,用于寫方法。還有一個待導入的excel 文件:
? ? ? ?excel 表的內容如下, 可以看見表格里面的內容較為簡單。
? ??
以下是詳細的代碼及分析:
import os
import xlrd
from xlrd import xldate_as_datetime
def parse_excel():
# 打開文件,并獲取第一個工作簿的內容
file_name = os.path.join(os.getcwd(), '學生信息表.xlsx')
work_book = xlrd.open_workbook(file_name)
work_sheet = work_book.sheet_by_index(0)
# 獲取總行數
total_rows = work_sheet.nrows
# 定義一個列表,用于存放每一行的內容
data_list = []
key_list = None
for i in range(total_rows):
# 獲取每一行的內容
row_data = work_sheet.row_values(i)
if i == 0:
# 將第一行的作為字典的key
key_list = row_data
else:
data_dict = dict()
for index, cel_data in enumerate(row_data):
# 獲取字典的key
key = key_list[index]
# 注意點01 : 如果該單元格存放的是日期類型,讀入的時候,需要借助 xldate_as_datetime 模塊
# 具體的用法請自行百度
if index == 7:
if cel_data:
cel_data = xldate_as_datetime(cel_data, 0)
else:
# 注意點02: 單元格是數字的,讀取時會識別為浮點數,特此處理一下
if isinstance(cel_data, float):
cel_data = int(cel_data)
# 字典賦值
data_dict[key] = cel_data
# 將字典加入需要返回的列表中
data_list.append(data_dict)
for data in data_list:
print(data)
if __name__ == '__main__':
parse_excel()
?打印出來的結果為:
{'序號': 1, '學號': 2019090100001, '姓名': '張三', '年級': '一年級', '班級': '一班', '座位號': 1, '性別': '男', '出生日期': datetime.datetime(2012, 5, 1, 0, 0)}
{'序號': 2, '學號': 2019090100002, '姓名': '李四', '年級': '一年級', '班級': '一班', '座位號': 2, '性別': '男', '出生日期': datetime.datetime(2012, 3, 15, 0, 0)}
{'序號': 3, '學號': 2019090100003, '姓名': '王五', '年級': '一年級', '班級': '一班', '座位號': 3, '性別': '男', '出生日期': datetime.datetime(2012, 6, 3, 0, 0)}
{'序號': 4, '學號': 2019090100004, '姓名': '陳六', '年級': '一年級', '班級': '一班', '座位號': 4, '性別': '男', '出生日期': datetime.datetime(2012, 11, 12, 0, 0)}
{'序號': 5, '學號': 2019090100005, '姓名': '劉七', '年級': '一年級', '班級': '一班', '座位號': 5, '性別': '男', '出生日期': datetime.datetime(2012, 12, 6, 0, 0)}
{'序號': 6, '學號': 2019090100006, '姓名': '梅花', '年級': '一年級', '班級': '一班', '座位號': 6, '性別': '男', '出生日期': datetime.datetime(2011, 9, 8, 0, 0)}
{'序號': 7, '學號': 2019090100007, '姓名': '關九', '年級': '一年級', '班級': '一班', '座位號': 7, '性別': '男', '出生日期': datetime.datetime(2012, 10, 7, 0, 0)}
{'序號': 8, '學號': 2019090100008, '姓名': '趙八', '年級': '一年級', '班級': '一班', '座位號': 8, '性別': '女', '出生日期': datetime.datetime(2012, 4, 18, 0, 0)}
{'序號': 9, '學號': 2019090100009, '姓名': '燕十三', '年級': '一年級', '班級': '一班', '座位號': 9, '性別': '女', '出生日期': datetime.datetime(2011, 12, 28, 0, 0)}
{'序號': 10, '學號': 2019090100010, '姓名': '歐陽清', '年級': '一年級', '班級': '一班', '座位號': 10, '性別': '女', '出生日期': datetime.datetime(2012, 1, 25, 0, 0)}
{'序號': 11, '學號': 2019090100011, '姓名': '東門吹水', '年級': '一年級', '班級': '一班', '座位號': 11, '性別': '女', '出生日期': datetime.datetime(2012, 2, 12, 0, 0)}
{'序號': 12, '學號': 2019090100012, '姓名': '西門硝煙', '年級': '一年級', '班級': '一班', '座位號': 12, '性別': '女', '出生日期': datetime.datetime(2011, 12, 13, 0, 0)}
{'序號': 13, '學號': 2019090100013, '姓名': '西方失敗', '年級': '一年級', '班級': '一班', '座位號': 13, '性別': '女', '出生日期': datetime.datetime(2012, 9, 5, 0, 0)}
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
