Python应用程序:从Android日志到Excel文件的智能过滤和输出

news/2024/7/21 5:03:26 标签: python, android, excel
python">import json
import subprocess
import re
import openpyxl

def logcat(excel_path, check_re):
    """
    查看 安卓手机日志信息
    :param excel_path: excel的路径信息,标题行字段
    :param check_re: 过滤当前日志的正则表达式(之后记得优化)
    :return:
    """

    # 打开现有的Excel文件
    workbook = openpyxl.load_workbook(excel_path)  # 替换为您的文件名

    # 选择要读取数据的工作表
    sheet = workbook.active  # 或者使用 sheet = workbook['工作表名称'] 替换 '工作表名称'

    # 读取第一行数据
    first_row_data = []

    for cell in sheet[1]:
        first_row_data.append(cell.value)

    # 清除安卓的日志缓冲区
    subprocess.run("adb logcat -c", shell=True, check=True)

    # 定义adb命令
    adb_command = "adb logcat"

    # 定义匹配JSON的正则表达式模式
    json_pattern = re.compile(r'\{.*\}')

    # 创建一个新的Excel工作簿
    workbook = openpyxl.Workbook()

    # 选择要写入数据的工作表
    sheet = workbook.active

    # 编写要写入的标题行
    sheet.append(first_row_data)

    # 设置单元格列宽度
    sheet.column_dimensions['A'].width = 23  # 设置第一列(A列)的宽度为23
    sheet.column_dimensions['B'].width = 23  # 设置第二列(B列)的宽度为23

    try:
        # 执行adb命令并捕获输出,以字节形式获取输出
        process = subprocess.Popen(adb_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        # 持续读取日志输出
        while True:
            line_bytes = process.stdout.readline()
            if not line_bytes:
                break
            line = line_bytes.decode('utf-8', errors='ignore').strip()

            # 使用正则表达式检查行是否包含JSON
            match = json_pattern.search(line)
            if match:
                # 如果行包含JSON,提取并打印JSON内容
                json_content = match.group()

                if re.search(check_re, json_content):
                    print(json_content)
                    # 逐行写入数据
                    json_data = json.loads(json_content)

                    temp = []
                    for cell in first_row_data:
                        temp.append(json_data[cell])
                    sheet.append(temp)

        # 等待命令执行完成
        process.wait()

    except Exception as e:
        print(f"{e}")

    finally:
        # 保存工作簿到文件
        workbook.save(excel_path)
        # 关闭工作簿
        workbook.close()

if __name__ == '__main__':
    logcat("example.xlsx", r'status.*orderId_.*')

http://www.niftyadmin.cn/n/5051829.html

相关文章

鸿蒙系列-ArkUI中的LazyForEach和SwiftUI中的ForEach有什么区别

OpenHarmony LazyForEach ArkUI 高性能 ForEach和LazyForEach区别 ForEach和LazyForEach差异 SwiftUI 提供了三种不同的机制来构建一棵树的动态部分,ForEach就是其中之一。 ArkUI是鸿蒙的核心UI布局框架,除了ForEach,它还提供了LazyForEach&…

磁铁产品上架亚马逊做什么认证?磁铁产品16CFR1262认证标准

玩具产品就需要做CPC认证:CPSIAASTMF9634.38磁铁标准(玩具安全标准消费者安全规范。) 法规要求 必须根据ASTM F963-17第8.25.1节至第8.25.3节中概述的程序对所有磁体产品进行测试。 《消费品安全法》(CPSA)第14&…

视频汇聚平台EasyCVR从一分屏切换到四分屏后加载记录显示黑屏该如何解决?

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度…

前端项目练习(练习-007-typescript-02)

学习前,首先,创建一个web-007项目,内容和web-006一样。(注意将package.json中的name改为web-007) 前面的例子,我们使用了nodejswebpack,成功创建了包含html,ts,css三个文…

基于bert-base-chinese的二分类任务

使用hugging-face中的预训练语言模型bert-base-chinese来完成二分类任务,整体流程为: 1.定义数据集 2.加载词表和分词器 3.加载预训练模型 4.定义下游任务模型 5.训练下游任务模型 6.测试 具体代码如下: 1.定义数据集 import torch from d…

用C++语言写一个可读的回调函数

在C中&#xff0c;可以使用函数指针、函数对象或Lambda表达式来实现回调函数。以下是一个使用函数指针实现的可读性较高的回调函数示例&#xff1a; #include <iostream> #include <functional> // 定义一个回调函数类型 using Callback std::function<v…

在 Substance Painter中实现Unity Standard Shader

由于有需要在Substance Painter中显示什么样的效果&#xff0c;在Unity就要显示什么样的效果的需求&#xff0c;最近研究了几天&#xff0c;总算在Substance Painter中实现Unity standard的材质的渲染效果。具体效果如下&#xff1a; 在Unity中&#xff1a; Substance Painte…

IP地址最终弹,DNS,数据链路层,特殊地址

目录 一、特殊地址 二、数据链路层 三、DNS 一、特殊地址 将IP地址中的主机IP全部设置为0&#xff0c;就成了网络号&#xff0c;代表这个局域网&#xff08;不可给具体的设备分配这个IP&#xff09; 将IP地址中的主机IP全部设置为1&#xff0c;就成了广播地址&#xff0c;给同…