You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python自动化照度计第三方软件的数据采集全流程?

照度计数据采集与处理全流程自动化方案

一、第三方软件UI自动化(PyAutoGUI实现)

针对桌面软件的按钮点击、弹窗操作,PyAutoGUI是最直接的解决方案,核心通过截图匹配或坐标定位完成控件交互:

环境准备

pip install pyautogui pillow

核心操作逻辑

  1. 控件定位:
    • 提前截取软件「开始」「停止」「保存」按钮的清晰截图,命名为start_btn.png、stop_btn.png、save_btn.png并存放在指定目录
    • 用pyautogui.locateCenterOnScreen()定位按钮中心,调用click()完成点击
  2. 采样率设置:点击开始后,弹窗输入1并按回车确认采样率
  3. 自动命名与保存:保存弹窗中直接输入递增的文件名(如test-1),确认保存到桌面

关键代码片段

import pyautogui
import time
import os

DESKTOP_PATH = os.path.join(os.path.expanduser('~'), 'Desktop')
BTN_DIR = './btn_screenshots/'
TEST_DURATION = 305  # 测试时长留5秒冗余

def get_next_test_id():
    # 自动生成递增的test编号
    test_files = [f for f in os.listdir(DESKTOP_PATH) if f.startswith('test-') and f.endswith('.txt')]
    if not test_files:
        return 1
    max_id = max(int(f.split('-')[1].split('.')[0]) for f in test_files)
    return max_id + 1

def automate_collect():
    test_id = get_next_test_id()
    test_name = f'test-{test_id}'
    
    # 点击开始按钮
    start_pos = pyautogui.locateCenterOnScreen(os.path.join(BTN_DIR, 'start_btn.png'))
    if not start_pos:
        raise ValueError('未找到开始按钮')
    pyautogui.click(start_pos)
    time.sleep(1)
    pyautogui.typewrite('1')
    pyautogui.press('enter')
    
    # 等待采集完成
    time.sleep(TEST_DURATION)
    
    # 点击停止按钮
    stop_pos = pyautogui.locateCenterOnScreen(os.path.join(BTN_DIR, 'stop_btn.png'))
    if not stop_pos:
        raise ValueError('未找到停止按钮')
    pyautogui.click(stop_pos)
    time.sleep(1)
    
    # 点击保存并命名
    save_pos = pyautogui.locateCenterOnScreen(os.path.join(BTN_DIR, 'save_btn.png'))
    if not save_pos:
        raise ValueError('未找到保存按钮')
    pyautogui.click(save_pos)
    time.sleep(2)
    pyautogui.typewrite(test_name)
    time.sleep(0.5)
    pyautogui.press('enter')  # 确认保存(需确保默认路径为桌面)
    
    return os.path.join(DESKTOP_PATH, f'{test_name}.txt')

二、TXT转指定格式Excel(Pandas实现)

用Pandas快速读取TXT并整理成要求的5列格式,效率远高于原生Excel操作库:

核心逻辑

  1. 读取TXT原始数据(需根据实际格式调整分隔符与列名)
  2. 构造指定列:
    • 第1列:空值列
    • 第2列:从1开始的序列号
    • 第3列:提取的Lux数值
    • 第4列:固定值Lux
    • 第5列:将原始时间转换为MM-DD-YY/HH:MM:SS格式
  3. 保存为Excel文件到桌面

代码示例

import pandas as pd
from datetime import datetime

def txt_to_excel(txt_path, excel_path):
    # 读取TXT(假设每行格式为:原始时间  Lux值,需根据实际调整)
    df = pd.read_csv(txt_path, sep='\s+', header=None, names=['raw_time', 'raw_lux'])
    
    # 构造目标列
    df['空列'] = ''
    df['序列号'] = range(1, len(df)+1)
    df['Lux值'] = df['raw_lux'].astype(float)
    df['单位'] = 'Lux'
    # 转换时间格式(假设原始时间为YYYY-MM-DD HH:MM:SS)
    df['时间'] = df['raw_time'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S').strftime('%m-%d-%y/%H:%M:%S'))
    
    # 按指定顺序保存
    output_cols = ['空列', '序列号', 'Lux值', '单位', '时间']
    df[output_cols].to_excel(excel_path, index=False)

三、全流程整合与现有脚本复用

将UI自动化、格式转换、数据处理串联为完整流程,同时优化现有处理脚本以适配自动化:

现有脚本优化(支持直接传文件路径)

修改原处理脚本的import_data_from_excel函数,避免手动选择文件:

# 修改原脚本的函数
def import_data_from_excel(file_path=None):
    if not file_path:
        file_path = filedialog.askopenfilename(filetypes=[("Excel Files", "*.xlsx")])
    if file_path:
        lux_values.clear()
        serial_numbers.clear()
        workbook = openpyxl.load_workbook(file_path)
        sheet = workbook.active

        for row in sheet.iter_rows(min_row=2, values_only=True):
            _, serial_number, lux_value, _, _ = row
            lux_values.append(lux_value)
            serial_numbers.append(serial_number)

        update_graph_and_results()

完整整合代码

import subprocess
from your_processing_script import import_data_from_excel, root

def main():
    # 1. 自动化采集并保存TXT
    txt_path = automate_collect()
    
    # 2. TXT转Excel
    excel_name = os.path.splitext(os.path.basename(txt_path))[0] + '.xlsx'
    excel_path = os.path.join(DESKTOP_PATH, excel_name)
    txt_to_excel(txt_path, excel_path)
    
    # 3. 执行数据处理脚本
    import_data_from_excel(excel_path)
    root.mainloop()

if __name__ == '__main__':
    main()

四、稳定性优化建议

  • 若PyAutoGUI截图匹配不稳定,可改用Pywinauto(针对Windows软件,直接定位控件,无需截图)
  • 添加try-except块捕获异常(如按钮找不到、文件保存失败),并增加重试机制
  • 测试时固定软件窗口位置与大小,避免控件坐标偏移

内容的提问来源于stack exchange,提问作者Zaki Aslam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:44:59