用python将Android资源文件中的不同语言的ResourceName提取到excel中

背景

公司最近要输出app的各语种的翻译内容,但app的语种太多,人工统计极为麻烦,通过python程序自动识别资源文件中不同语种的strings.xml的分析,并将最终结果以excel的方式展示出来。

工具

xlwt xml.dom

准备工作

  • python环境
  • 安装xlwt

实现

分析Android资源文件的目录
用python将Android资源文件中的不同语言的ResourceName提取到excel中
所有的资源都存放在values*文件夹下,我们只要values文件夹下的strings.xml文件

初始化excel表操作部分

def init_xls(sheetname):
    font = xlwt.Font()
    font.name = 'SimSun'
    style = xlwt.XFStyle()
    style.font = font
    fxls = xlwt.Workbook(encoding='utf-8')
    table = fxls.add_sheet(sheetname, cell_overwrite_ok=True)
    return fxls, table

解析strings.xml,将解析结果存到字典中

def read_string_xml(xmlname):
    sdict = {}
    doc = minidom.parse(xmlname)
    stringtaglen = len(doc.getElementsByTagName('string'))
    itemlen = len(doc.getElementsByTagName('item'))

    for idx in range(0, stringtaglen):
        nameattr = doc.getElementsByTagName('string')[idx].getAttribute('name')
        fc = doc.getElementsByTagName('string')[idx].firstChild
        if fc is None:
            content = ""
        else:
            content = fc.data
        sdict[nameattr] = content

    for idx in range(0, itemlen):
        nameattr = doc.getElementsByTagName('item')[idx].getAttribute('name')
        fc = doc.getElementsByTagName('item')[idx].firstChild
        if fc is None:
            content = ""
        else:
            content = fc.data
        sdict[nameattr] = content
    return sdict

输出到excel中

def main():
    inputfilepath = r'C:\Users\XXX\Desktop\res-MediaCenter'
    xls, table = init_xls('Language')
    table.write(0, 0, 'ResourceName')
    dir_list = os.listdir(inputfilepath)
    list = []
    dict = {}
    i = 1
    for file in dir_list:
        if file.__contains__('values'):
            filename = inputfilepath + '/' + file + '/' + 'strings.xml'
            if not os.path.exists(filename):
                continue
            resourcedict = read_string_xml(filename)
            for resource in resourcedict:
                if resource not in list:
                    list.append(resource)
                    dict[resource] = i
                    table.write(i, 0, resource)
                    i = i + 1
    k = 1
    for file in dir_list:
        if file.__contains__('values'):
            filename = inputfilepath + '/' + file + '/' + 'strings.xml'
            if not os.path.exists(filename):
                continue
            resourcedict = read_string_xml(filename)
            colname = file[7:]
            if colname == "":
                colname = "default"
            table.write(0, k, colname)
            for resource in resourcedict:
                table.write(dict[resource], k, resourcedict[resource])
            k = k + 1
    outputfilepath = r'C:\Users\XXX\Desktop\MediaCenter.xls'
    if os.path.exists(outputfilepath):
        os.remove(outputfilepath)
    xls.save(outputfilepath)

结语

一秒钟完成统计,编程提高工作效率。