本章節(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為例:)
2,添加該項(xiàng)目需要的其他庫(kù),見(jiàn)下圖:
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è)面。
二,在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)