本章节为“Python Flask显示公司疫情情况”的四篇连载的第一篇,使用Pycharm社区版做开发环境。
一,在pycharm社区版中创建flask开发项目
1,Pycharm的专业版集成了Web开发环境,但社区版也是一样可以的,首先创建“flaskweb”python常规项目。然后在“setting”中点击右侧的“+”号,添加所需要的库(以添加flask为例:)
2,添加该项目需要的其他库,见下图:
3,在“flaskweb”的项目结构视图下,创建data、sqlite、excel、json、static、templates文件夹。data用来存放excel、json等数据,sqlite存放操作数据库的py文件,excel和json文件夹用来存放操作Excel、JSON文件的py文件,static存放flask网页需要的js和css等静态文件,templates存放flask的jinjia2模板页面。
二,在excel文件夹中创建用来解析Excel文件的read_data.py。
Excel模板-百度云盘下载: 提取码: y9j2
为了方便其他py文件使用该解析Excel的API,定义一个ExcelReader类:
import json
import os
import re
import xlrd
class ExcelReader(object):
def __init__(self, excel_name, sheet_name):
self.excel_name = excel_name
# 获取当前.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页
self.table = self.data.sheet_by_name(sheet_name)
self.rows = self.table.nrows # 获取总行数
self.cols = self.table.ncols # 获取总列数
def data_dict(self):
if self.rows <= 1:
print("Excel无数据,路径:", end='')
print(self.excel_path)
return False
else:
# 将列表的第一行设置为字典的key值
keys = self.table.row_values(0)
# 定义一个数组
data = []
# Excel表头占了两行,所以从第3行开始读取数据,循环rows(总行数)-1次
for i in range(2, self.rows):
# 循环内定义一个字典,每次循环都会清空
dict = {}
# 从第一列开始读取数据,循环cols(总列数)次
for j in range(0, self.cols):
# 将value值关联同一列的key值
dict[keys[j]] = str(self.table.row_values(i)[j])
# 将关联后的字典放到数组里
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国'
str = re.sub('[a-zA-Z0-9’!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?“”‘’![\\]^_`{|}~\s]+', "", s)
# 去除特殊字符,只保留汉子,字母、数字
# sub_str = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", str)
# 去除不可见字符
# 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)
三,如何调用excel文件夹下的py文件
1,在read_data.py文件中,可以在该文件中执行main方法:
if __name__ == '__main__':
start = ExcelReader('Example.xlsx', 'Sheet1 (2)')
data = start.data_dict()
start.data_dict_to_json(data)
2,如果要在read_data.py外也有多种方法可以调用API,但推荐使用类导入的方式,即通过from ... import 导入python文件中定义的类。
from excel.read_data import ExcelReader
xls_reader = ExcelReader('soft2.18.xlsx','2月18日')
data = xls_reader.data_dict()
print(data)