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


    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_.*')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
  • 相关阅读:
    Fun和Do
    Linux进程 ----- 信号处理
    集合体系【List+Set+Map+HashMap+TreeSet】
    商城免费搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
    [答疑]系统首先维护的是本质而不是现象
    洛谷 P1449 后缀表达式
    校园信息发布平台小程序的作用是什么
    MybatisPlus--基础入门!真滴方便
    淘宝商品链接获取淘宝商品评论数据(用 Python实现淘宝商品评论信息抓取)
    Rider调试ASP.NET Core时报thread not gc-safe的解决方法
  • 原文地址:https://blog.csdn.net/weixin_51311218/article/details/133323981