Skip to content

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()

鄂ICP备2024055897号