引言:做Android开发的时候要做国际化,需要将Android工程中的字符串资源导出到excel,让专业团队翻译。由于项目比较多,手动复制不现实,故使用python 将xml文件中对应的字符串解析到excel中。
用法
复制以下代码到python文件中,如string2excel.py, 添加可执行权限(mac 电脑 chmod +x string2excel.py),将所有要导出的strings.xml复制到string2excel.py同一目录下,执行./string2excel.py 就会在同级目录下生成excel文件。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Android国际化: 将xml文件中对应的字符串解析到excel中
import xml.dom.minidom
from xlwt import Workbook
import os
def all_path(dirname,subfix):
result = []#所有的文件
filter=[subfix] #设置过滤后的文件类型 当然可以设置多个类型
for maindir, subdir, file_name_list in os.walk(dirname):
# print("1:",maindir) #当前主目录
# print("2:",subdir) #当前主目录下的所有目录
# print("3:",file_name_list) #当前主目录下的所有文件
for filename in file_name_list:
apath = os.path.join(maindir, filename)#合并成一个完整路径
ext = os.path.splitext(apath)[1] # 获取文件后缀 [0]获取的是除了文件名以外的内容
if ext in filter:
result.append(apath)
return result
#新建一个workbook
book = Workbook(encoding='utf-8')
#生成的excel表名称
excel_file_name = 'Android_strings.xls'
#要处理的文件所在路径及文件后缀
all_file=all_path("./",".xml")
#打印所有要输出的文件的路径及名称
print(all_file)
sheet_info = []
class SheetInfo:
sheet_name=''
elementCount = 0
def __init__(self, name, count):
self.sheet_name = name
self.elementCount = count
for file in all_file:
filename= os.path.splitext(os.path.basename(file))[0]
sheet = book.add_sheet(filename)
#打开xml
xmldoc = xml.dom.minidom.parse(file)
code = xmldoc.getElementsByTagName('string')
#表头
row = 0
sheet.write(row, 0, 'Key')
sheet.write(row, 1, 'EN')
row = row+1
#读取每一行写到excel中
for node in code:
for item in node.childNodes:
sheet.write(row, 0, node.getAttribute('name'))
sheet.write(row, 1, item.data)
row = row+1
#记录表名和行数,用于统计
sheet_info.append(SheetInfo(filename,row-1))
#保存workbook
book.save(excel_file_name)
#增加汇总表
sheet = book.add_sheet('汇总')
row= 1
for element in sheet_info:
sheet.write(row, 0, element.sheet_name)
sheet.write(row, 1, element.elementCount)
row = row+1
#保存workbook
book.save(excel_file_name)