Android string.xml与Excel的互相转换
Notice
使用以下脚本需要安装 openpyxl 和 lxml 两个库。
string.xml转成Excel文件
"""
将 Android string.xml 文件中的文本转换成 Excel 表格并保存到文件。
使用方法:python android_string_to_excel.py -f strings.xml [-o outfile_name]
-f: 要处理的 Android string.xml 文件路径.
-o: 输出文件路径,如果未指定,则默认为 'strings.xlsx'.
"""
import os
import argparse
import openpyxl
from lxml import etree
def printUsage():
"""print usage and exit"""
usage = '''Usage:
python android_string_to_excel.py -f strings.xml [-o outfile_name]
'''
print(usage)
exit(-1)
parser = argparse.ArgumentParser(description='Convert Android string.xml to Excel')
parser.add_argument('-f', '--file',
type=str,
required=True,
help='Android string.xml file path')
parser.add_argument('-o', '--output',
type=str,
help='Output file name, default is "strings.xlsx"')
args = parser.parse_args()
xml_path = args.file
out_file = args.output or 'strings.xlsx'
if not os.path.isfile(xml_path):
print(f'Error: {xml_path} is not a valid file!')
printUsage()
try:
tree = etree.parse(xml_path)
except etree.ParseError as e:
print(f'Error: cannot parse XML at {xml_path}, {e}')
exit(-1)
root = tree.getroot()
workbook = openpyxl.Workbook()
sheet = workbook.active
col_idx = 1
headers = ['key', 'value']
for col_idx, header in enumerate(headers, 1):
sheet.cell(row=1, column=col_idx, value=header)
for row_idx, child in enumerate(root, 2):
key = child.attrib['name']
value = child.text.strip() if child.text else ''
sheet.cell(row=row_idx, column=1, value=key)
sheet.cell(row=row_idx, column=2, value=value)
workbook.save(out_file)
print(f'{xml_path} converted and saved to {out_file}.')
Excel生成string.xml文件
import argparse
import xml.etree.ElementTree as ET
from openpyxl import load_workbook
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file', type=str, required=True,
help='Excel file path')
parser.add_argument('-s', '--sheet', type=str, default='Sheet1',
help='Sheet name in Excel file, default is "Sheet1"')
parser.add_argument('-k', '--key', type=int, default=1,
help='Index of key column in Excel file, default is 1')
parser.add_argument('-v', '--value', type=int, default=2,
help='Index of value column in Excel file, default is 2')
parser.add_argument('-o', '--output', type=str, default='strings.xml',
help='Output file name, default is "strings.xml"')
args = parser.parse_args()
def excel_to_xml(excel_file, sheet_name, key_index, value_index, output_file):
workbook = load_workbook(filename=excel_file)
worksheet = workbook[sheet_name]
root = ET.Element("resources")
for row in worksheet.values:
key = str(row[key_index-1])
value = str(row[value_index-1])
item = ET.SubElement(root, "string", name=key)
item.text = value
tree = ET.ElementTree(root)
tree.write(output_file, encoding='utf-8')
excel_to_xml(args.file, args.sheet, args.key, args.value, args.output)
Android string.xml与Excel的互相转换的更多相关文章
- Android string.xml error: Apostrophe not preceded by \
Android string.xml error: Apostrophe not preceded by \ 遇到了这个错误,编译无法通过 error: Apostrophe not preceded ...
- 【Android】android string.xml前后加空格的技巧
android string.xml 文字中间加入空格 <string name="password">密 码</string>   ...
- android string.xml %问题
反复检查后发现是string.xml中的 % 导致编译失败, 这是由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android ...
- android string.xml里的空格字符
在string.xml定义字符串的时候常常要用到空格, 直接用键盘敲的话不知道是几个空格,常常看错了,导致误删. 假设用 来替代空格的话,就好非常多. 另外使用%1$s,%1$d能够在一个字符串里定义 ...
- Android string.xml 添加特殊字符
解决项目中在string.xml 中显示特殊符号的问题,如@号冒号等.只能考虑使用ASCII码进行显示: @号 @ :号 : 空格 以下为常见的ASCII十进制交换编码: --> <- ...
- Android string.xml 显示特殊符号
项目中要在string.xml 中显示特殊符号,如@号冒号等,直接写肯定不行啦..只能考虑使用ASCII码进行显示: 省略号 …@号 @:号 :空格 以下为常见的ASCII十进制交换编码: --& ...
- android string.xml前后加空格的技巧
方法1: <string name="password">密 码</string>  这个就代表着空格. 方法2:用\u0020代表空 ...
- Android String.xml中的符号总结
<b></b>加粗字体 <i></i> 斜体字体 <u></u> 给字体加下划线 \n 换行 \u0020表示空格 \u2026 ...
- android textview改变部分文字的颜色和string.xml中文字的替换(转)
转 :http://blog.csdn.net/ljz2009y/article/details/23878669 一:TextView组件改变部分文字的颜色: TextView textView ...
- Android Studio 轻松整理字符串到string.xml中
昨天了解了Alt+Enter快捷键的大用处,今天又发现了一个快捷的方法,必须记下来.转载请注明出处http://www.cnblogs.com/LT5505/p/5466630.html 1.首先代码 ...
随机推荐
- 深度学习之PyTorch实战(4)——迁移学习
(这篇博客其实很早之前就写过了,就是自己对当前学习pytorch的一个教程学习做了一个学习笔记,一直未发现,今天整理一下,发出来与前面基础形成连载,方便初学者看,但是可能部分pytorch和torch ...
- [GIT] 如何处理GIT分支合并(GIT MERGE)
1 概述 2 分支合并 如果你有两个分支main和dev,main存放稳定版本,dev是开发版本,一个阶段后,你需要把dev代码更新到main分支中. dev --(merge update cont ...
- [Linux]scp/sshpass:物理主机与虚拟机的文件传输
最初写这篇文章的时候,对 openssh大家族的工具套件(例如: ssh.sshd.ssl.scp等)不太熟悉,现在看来这个文章的标题(虚拟机与物理机)是存在问题的. 本质上,本文关心的并不是[虚拟机 ...
- 【解释器设计模式详解】C/Java/Go/JS/TS/Python不同语言实现
简介 解释器模式(Interpreter Pattern)是一种行为型设计模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文.这种模式常被用在 SQL 解析.符号处理引擎等. 解释器模式常 ...
- Redis 数据类型 Zset
Redis 数据类型 Zset(有序集合) Redis 常用命令,思维导图 >>> zset是Redis提供的一个非常特别的数据结构,常用作排行榜等功能,以用户id为value,关注 ...
- 微信Token验证代码的实现
微信开放第三方API接口, 申请地址: https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/inter ...
- token验证
token验证 什么是token?我相信很多开发者都或多或少听过基于 token 的用户鉴权和基于 session 的用户鉴权,而今天说的 token 验证就是第一种了.token 的意思是" ...
- 【LeetCode动态规划#10】完全背包问题实战,其三(单词拆分,涉及集合处理字符串)
单词拆分 力扣题目链接(opens new window) 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆 ...
- RateLimiter使用
1.maven依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...
- (一)pyahocorasick和marisa_trie,字符串快速查找的python包,自然语言处理,命名实体识别可用的高效包
Pyahocorasick Pyahocorasick是一个基于AC自动机算法的字符串匹配工具.它可以用于快速查找多个短字符串在一个长字符串中的所有出现位置.Pyahocorasick可以在构建状态机 ...