前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 遍历toast msg文本背景简易语法介绍1. 查找目录下所有java文件查找Java文件中的Toast在对应行中找出对应的id使用id在String中查找对应的toast提示信息。

python 遍历toast msg文本背景简易语法介绍1. 查找目录下所有java文件查找Java文件中的Toast在对应行中找出对应的id使用id在String中查找对应的toast提示信息。

作者头像
用户1127566
发布2018-06-04 18:00:36
3.9K0
发布2018-06-04 18:00:36
举报
文章被收录于专栏:Android 开发学习Android 开发学习

背景

最近有个简单的迭代需求,需要统计下整个项目内的Toast的msg, 这个有人说直接快捷键查找下,但这里比较坑爹的是项目中查出对应的有1000多处。妈呀,自己查找,还要根据查找id找到对应string,比较坑。于是就顺带练手写了个python脚本来处理这个问题。当然编码相对不太规范,异常处理也没做。由于lz好久没写过python脚本了,相当生疏。几乎是边查文档编写,记录写编写过程:

  1. 查找目录下所有java文件
  2. 查找Java文件中含有Toast相关的行
  3. 在对应行中找出对应的id
  4. 使用id在String中查找对应的toast提示信息。

简易语法介绍

  1. 函数定义 def 函数名,可以返回元组。
  2. 分号可以省略,通过换行来区分
  3. 变量不需要提前声明
  4. if和for语句是这个样子滴:
代码语言:javascript
复制
 for node in root:

 if node.attrib.has_key("name") > 0  :
  1. 导库:import os
  2. 执行开始的地方还是main函数,后面会有。

1. 查找目录下所有java文件

这个我是直接copy网上递归遍历的,省略。

查找Java文件中的Toast

需要找出Toast的特征,项目中有两个Toast类 BannerTips和ToastUtils 两个类。 1.先代码过滤对应的行。找到BannerTips、ToastUtils调用的地方 2.找出提示的地方 3.观察其实项目中的id的前面均含有R.string. 可以以此作为区分。

在对应行中找出对应的id

使用id在String中查找对应的toast提示信息。

最后去重。

最后一个比较简单,可以自己写,也可以解析下xml写。

代码语言:javascript
复制
import xml.etree.ElementTree as ET
    tree = ET.ElementTree(file = '' + xmlFile)
    root = tree.getroot()
    for node in root:
      if node.attrib.has_key("name") > 0  :
        if(node.attrib['name'] == msg):
          out.write(":%s\n" % node.text.encode('utf-8'))

贴下代码

代码语言:javascript
复制
import os
import xml.etree.ElementTree as ET

def findStr(out, msg,fullname):
    xmlFile = 'xx/src/main/res/values/radio_strings.xml'
    strInfos = open(xmlFile,'r+')
    tree = ET.ElementTree(file = '' + xmlFile)
    root = tree.getroot()
    for node in root:
      if node.attrib.has_key("name") > 0  :
        if(node.attrib['name'] == msg):
          out.write("%s\n" % node.text.encode('utf-8'))

def findJava(fullname,out):
  file= open(fullname, 'r+')
  for line in file:
    newline = line.strip()
    if(newline.find("ToastUtils.") != -1):
      lineTexts = newline.split(',')
      if(len(lineTexts) <= 1):
          continue
      linetxt = lineTexts[1]
      aa = linetxt.strip().replace(');', '')
      aa = aa.replace(')', '')
      if(aa.find('R.string.') != -1):
        msgs = aa.split('R.string.')
        if(len(msgs) <= 1):
          continue

        msg = msgs[1]
        msg = msg.replace(' :', '');
        if(msg.find('?') == -1):
          if not msg:
              continue
          findStr(out, msg, fullname)
        else:
          if not msg:
              continue
          findStr(out, msg, fullname)
          if(len(msgs) >=2):
            findStr(out, msgs[1], fullname)


  outDel = open('XX/android_dialogMsg.txt')
  output = open('XX/android_dialog_msg.txt','r+')
  s = set()
  for i in outDel:
      s.add(i)
  for li in s:
      output.write(li)
  outDel.close()
  output.close()
  file.close()

def ListFilesToTxt(dir,file,wildcard,recursion):
    exts = wildcard.split(" ")
    files = os.listdir(dir)
    for name in files:
        fullname=os.path.join(dir,name)
        if(os.path.isdir(fullname) & recursion):
            ListFilesToTxt(fullname,file,wildcard,recursion)
        else:
            for ext in exts:
                if(name.endswith(ext)):
                    findJava(fullname, file)
                    break
def Test():
  dir = "xxx"
  outfile='XX/android_dialogMsg.txt'
  wildcard = ".java"

  file = open(outfile,"w")
  if not file:
    print ("cannot open the file %s for writing" % outfile)
  ListFilesToTxt(dir,file,wildcard, 1)

  file.close()

if __name__ == '__main__':
         Test()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.03.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 简易语法介绍
  • 1. 查找目录下所有java文件
  • 查找Java文件中的Toast
  • 在对应行中找出对应的id
  • 使用id在String中查找对应的toast提示信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档