python
出这期主要是快速入门python,然后操作excel!!!
准备
先下载一些必要软件,后面要用到的。
python下载
下载python,地址在 这,打开网站以后如下图所示:

如果你的运气很好,点一下这里,浏览器就会下载一个exe来进行安装,那就直接看 下面的安装 就好。
如果你运气不好呢,点击这里以后他进了新的页面,那就拉到最下面去。如下图所示:


python安装
安装需要注意以下问题,打开exe以后一定要勾选这两个以后再点击安装:

接着下一步下一步完成就行。
那么怎么知道这玩意安装成功没有呢,window键 + r
然后输入cmd
,或者左下角的搜索打开以后输入cmd
,会打开一个黑框框,在黑框框里面输入python
,如果显示python+版本号那就没有问题了。
vscode下载
用这个写代码,下载地址是 [这个] (https://code.visualstudio.com/) ,官方页面如下图所示,按照下图先下载安装包。然后点击安装(装D盘),因为太简单了我选择略过。

vscode配置
下载好了以后,打开vscode,左侧第四个扩展里面搜索插件 Chinese
下载第一个,搜索Black Formatter
下载第一个,如下图所示:


到这里,前期配置就告一段落了。还可以再应用商店中下载Tabnine
帮你写代码。
开发
去D盘某个地方新建一个pythonCode
文件夹,然后再vscode中点击左上角的文件,去打开那个文件夹。再然后在左侧新增一个文件,起名为excelHandle.py
,再粘贴下面的代码:
python
import os
import glob
import openpyxl
from openpyxl.styles import PatternFill, Font
from datetime import datetime
from queue import Queue
import time
def calculate_average(nums):
if len(nums) == 0:
return 0 # 如果数组为空,返回0或者其他适当的值,这里返回0是一种处理方法
total = sum(nums)
return total / len(nums)
# EnvironmentData - 开始
class EnvironmentData:
def __init__(self, time):
self.time = time
self.temperatures = []
self.humidities = []
def addData(self, temperatures, humidities):
self.temperatures.append(temperatures)
self.humidities .append(humidities)
def computeData(self):
self.maxTem = max(self.temperatures) if self.temperatures else None
self.minTem = min(self.temperatures) if self.temperatures else None
self.aveTem = round(calculate_average(
self.temperatures), 2) if self.temperatures else None
self.maxHum = max(self.humidities) if self.humidities else None
self.minHum = min(self.humidities) if self.humidities else None
self.aveHum = round(calculate_average(
self.humidities), 2) if self.humidities else None
# EnvironmentData - 结束
# 通过文件路径获得excel - 开始
def read_excel_file_deal(file_path):
# 加载 Excel 文件
wb = openpyxl.load_workbook(file_path)
# 获取所有工作表名
sheet_names = wb.sheetnames
# 选择第一个工作表
sheet = wb[sheet_names[0]]
excelData = []
# 初始化日期和数据项
date = None
dataItem = None
# 遍历打印工作表内容,从第八行开始拿数据
# 把年月日相同的数据归并到一起并计算最大值和最小值
for row in sheet.iter_rows(min_row=9, values_only=True):
# 假设 row[1] 是一个包含日期时间的字符串,例如 '2024-06-27 17:51:08',或者已经是时间格式
if isinstance(row[1], str):
date_obj = datetime.strptime(row[1], '%Y-%m-%d %H:%M:%S')
else:
date_obj = row[1]
# 提取年、月、日,并转换为字符串格式
year = str(date_obj.year)
month = '{:02d}'.format(date_obj.month) # 将月份格式化为两位数,不足两位自动补零
day = '{:02d}'.format(date_obj.day) # 将日期格式化为两位数,不足两位自动补零
# 组合成年月日的字符串
date_str = month + '.' + day
# date_str = year + '-' + month + '-' + day
if date != date_str:
date = date_str
dataItem = EnvironmentData(date_str)
excelData.append(dataItem)
dataItem.addData(row[3], row[5])
# 处理数据
for data in excelData:
data.computeData()
# 创建一个新的 sheet,并命名为 '统计结果'
new_sheet_name = '统计结果'
if new_sheet_name in wb.sheetnames:
new_sheet = wb[new_sheet_name]
# 清空旧的 sheet 中的数据(包括表头)
new_sheet.delete_rows(1, sheet.max_row)
else:
new_sheet = wb.create_sheet(new_sheet_name)
# 设置每列的固定宽度
column_widths = [20, 25, 25, 25, 10, 20, 25, 25, 25]
# 遍历列宽度列表,并设置每列的宽度
for i, width in enumerate(column_widths, 1):
new_sheet.column_dimensions[chr(64 + i)].width = width
# 塞入表头
new_sheet_title = [
'时间', '最大温度(℃)', '最小温度(℃)', '平均温度(℃)', '', '时间', '最大湿度(%)', '最小湿度(%)', '平均湿度(%)']
new_sheet.append(new_sheet_title)
# 设置表头的背景颜色和字体样式
header_fill = PatternFill(start_color='FFC000',
end_color='FFC000', fill_type='solid')
header_font = Font(bold=True)
for cell in new_sheet[1]: # 第一行的单元格
if cell.value != '':
cell.fill = header_fill
cell.font = header_font
# 将数据逐行写入新创建的 sheet
for row in excelData:
new_sheet.append(
[row.time, row.maxTem, row.minTem, row.aveTem, None, row.time, row.maxHum, row.minHum, row.aveHum])
# 保存
wb.save(file_path)
# 通过文件路径获得excel - 结束
# 通过文件夹获得excel文件列表
def find_excel_files(folder_path):
# 切换到指定的文件夹路径
os.chdir(folder_path)
# 使用 glob 模块查找所有的 Excel 文件
excel_files = glob.glob('*.xls') # 查找 .xls 结尾的文件
excel_files += glob.glob('*.xlsx') # 查找 .xlsx 结尾的文件
return excel_files
# 通过文件夹获得excel文件列表 - 结束
# 主函数
def main():
folder_path = 'C:/Users/pp/Desktop/处理后的数据' # 替换成实际的文件夹路径
excel_files = find_excel_files(folder_path)
# 记录开始时间
start_time = time.time()
# 创建一个队列
file_queue = Queue()
# 将所有Excel文件路径放入队列
for file in excel_files:
file_queue.put(file)
# 逐个处理队列中的文件
while not file_queue.empty():
file = file_queue.get()
read_excel_file_deal(folder_path + '/' + file)
print("File {} processed successfully.".format(file))
# 计算时间差,单位为秒
execution_time = time.time() - start_time
print(f"任务结束,运行时长:{execution_time} 秒")
# 主函数 - 结束
if __name__ == "__main__":
main()