(一)利用xlrd解析員工疫情Excel

本章節(jié)為“Python Flask顯示公司疫情情況”的四篇連載的第一篇,使用Pycharm社區(qū)版做開發(fā)環(huán)境。

一,在pycharm社區(qū)版中創(chuàng)建flask開發(fā)項(xiàng)目
1,Pycharm的專業(yè)版集成了Web開發(fā)環(huán)境,但社區(qū)版也是一樣可以的,首先創(chuàng)建“flaskweb”python常規(guī)項(xiàng)目。然后在“setting”中點(diǎn)擊右側(cè)的“+”號(hào),添加所需要的庫(kù)(以添加flask為例:)

flask.PNG

2,添加該項(xiàng)目需要的其他庫(kù),見(jiàn)下圖:


flaskweb.PNG

3,在“flaskweb”的項(xiàng)目結(jié)構(gòu)視圖下,創(chuàng)建data、sqlite、excel、json、static、templates文件夾。data用來(lái)存放excel、json等數(shù)據(jù),sqlite存放操作數(shù)據(jù)庫(kù)的py文件,excel和json文件夾用來(lái)存放操作Excel、JSON文件的py文件,static存放flask網(wǎng)頁(yè)需要的js和css等靜態(tài)文件,templates存放flask的jinjia2模板頁(yè)面。


pycharm.PNG

二,在excel文件夾中創(chuàng)建用來(lái)解析Excel文件的read_data.py。
Excel模板-百度云盤下載: 提取碼: y9j2

為了方便其他py文件使用該解析Excel的API,定義一個(gè)ExcelReader類:

import json
import os
import re
import xlrd


class ExcelReader(object):
    def __init__(self, excel_name, sheet_name):
        self.excel_name = excel_name
        # 獲取當(dāng)前.py文件所在文件夾層
        dir_path = os.path.dirname(os.path.realpath(__file__))
        # 再次向上獲取工程的文件夾層
        project_path = os.path.dirname(dir_path)
        # 獲取excel所在文件目錄
        self.excel_path = os.path.join(project_path, "data", excel_name)
        # 打開指定的excel文件
        self.data = xlrd.open_workbook(self.excel_path)
        # 找到指定的sheet頁(yè)
        self.table = self.data.sheet_by_name(sheet_name)
        self.rows = self.table.nrows  # 獲取總行數(shù)
        self.cols = self.table.ncols  # 獲取總列數(shù)

    def data_dict(self):
        if self.rows <= 1:
            print("Excel無(wú)數(shù)據(jù),路徑:", end='')
            print(self.excel_path)
            return False
        else:
            # 將列表的第一行設(shè)置為字典的key值
            keys = self.table.row_values(0)
            # 定義一個(gè)數(shù)組
            data = []
            # Excel表頭占了兩行,所以從第3行開始讀取數(shù)據(jù),循環(huán)rows(總行數(shù))-1次
            for i in range(2, self.rows):
                # 循環(huán)內(nèi)定義一個(gè)字典,每次循環(huán)都會(huì)清空
                dict = {}
                # 從第一列開始讀取數(shù)據(jù),循環(huán)cols(總列數(shù))次
                for j in range(0, self.cols):
                    # 將value值關(guān)聯(lián)同一列的key值
                    dict[keys[j]] = str(self.table.row_values(i)[j])
                # 將關(guān)聯(lián)后的字典放到數(shù)組里
                data.append(dict)
            return data

    def data_dict_to_json(self, data):
        # 獲取生成json所在文件目錄
        file_name = self.excel_path + '.json'
        with open(file_name, 'w', encoding='utf-8') as file_object:
            json.dump(data, file_object, ensure_ascii=False)
        return file_object

    def escap_no_common_char(self, s):
        # s = '1123*#$ 中abc國(guó)'
        str = re.sub('[a-zA-Z0-9’!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?“”‘’![\\]^_`{|}~\s]+', "", s)
        # 去除特殊字符,只保留漢子,字母、數(shù)字
        # sub_str = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", str)
        # 去除不可見(jiàn)字符
        # str = re.sub(
        #     '[\001\002\003\004\005\006\007\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a]+',
        #     '', str)
        print(str)


if __name__ == '__main__':
    start = ExcelReader('Example.xlsx', 'Sheet1 (2)')
    data = start.data_dict()
    start.data_dict_to_json(data)

三,如何調(diào)用excel文件夾下的py文件
1,在read_data.py文件中,可以在該文件中執(zhí)行main方法:

if __name__ == '__main__':
    start = ExcelReader('Example.xlsx', 'Sheet1 (2)')
    data = start.data_dict()
    start.data_dict_to_json(data)

2,如果要在read_data.py外也有多種方法可以調(diào)用API,但推薦使用類導(dǎo)入的方式,即通過(guò)from ... import 導(dǎo)入python文件中定義的類。

from excel.read_data import ExcelReader

xls_reader = ExcelReader('soft2.18.xlsx','2月18日')
data = xls_reader.data_dict()
print(data)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Django 準(zhǔn)備 “虛擬環(huán)境為什么需要虛擬環(huán)境:到目前位置,我們所有的第三方包安裝都是直接通過(guò) pip inst...
    33jubi閱讀 1,394評(píng)論 0 5
  • python學(xué)習(xí)筆記 聲明:學(xué)習(xí)筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學(xué)習(xí)學(xué)習(xí)的,另外根據(jù)自己平時(shí)的積累進(jìn)行修正...
    renyangfar閱讀 3,272評(píng)論 0 10
  • 1.1 虛擬環(huán)境 1.1.1 為什么需要虛擬環(huán)境 學(xué)習(xí)Flask之前,我們所有的第三方包安裝都是直接通過(guò)pip i...
    成長(zhǎng)之路丶閱讀 719評(píng)論 0 5
  • 立夏之后, 夏季第二, 節(jié)氣小滿。 夏熟作物籽, 開始灌漿。 還未成熟, 只是小滿。 5 月20日, 到22日間,...
    解龍閱讀 247評(píng)論 1 3
  • 「簡(jiǎn)書」作為一款「寫作軟件」在誕生之初就支持了 Markdown,Markdown 是一種「電子郵件」風(fēng)格的「標(biāo)記...
    Mystere閱讀 217評(píng)論 0 0

友情鏈接更多精彩內(nèi)容