用python将Android资源文件中的不同语言的ResourceName提取到excel中
背景
公司最近要输出app的各语种的翻译内容,但app的语种太多,人工统计极为麻烦,通过python程序自动识别资源文件中不同语种的strings.xml的分析,并将最终结果以excel的方式展示出来。
工具
xlwt xml.dom
准备工作
- python环境
- 安装xlwt
实现
分析Android资源文件的目录
所有的资源都存放在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)
结语
一秒钟完成统计,编程提高工作效率。