国际化字条匹配并导出为excel格式
需求
将jsp页面里的key值,就是<spring:message code="gsyezer_Single_crystal"/>
里的gsyezer_Single_crystal
。和对应的字条对应上,并以excel表格形式输出。
- jsp页面key值示例
<label for=""><spring:message code="xhb_comp_type"/><!-- 组件类型--></label>
<select name="" class="sys_select one_key_moduleType">
<option value="1"><spring:message code="gsyezer_Single_crystal"/><!-- 单晶--></option>
<option value="2"><spring:message code="gsyezer_Polycrystalline"/><!-- 多晶--></option>
<option value="3"><spring:message code="gsyezer_film"/><!-- 薄膜--></option>
</select>
-
对应字条文件示例
xhb_comp_type=组件类型 gsyezer_Single_crystal=单晶 gsyezer_Polycrystalline=多晶 gsyezer_film=薄膜 gsyezer_Material_name=物料名称 gsyezer_Product_specification=产品规格 gsyezer_Material_type=物料类型 gsyezer_Brand=品牌 ......
-
输出excel表格示例
python实现
import re
import pandas as pd
# 读取
with open('D:\\desktop\\workSpace\\index.txt', 'r', encoding = 'UTF-8') as f:
content = f.read()
# 匹配
pattern = r'spring:message code=\"(.*?)\"'
matches = re.findall(pattern, content)
# 读取lang文件
with open("D:\\desktop\\workSpace\\lang.txt", "r", encoding = "UTF-8") as f:
content1 = f.readlines()
# 匹配
pattern1 = re.compile(r"(\w+)=(.*)")
matches1 = []
for line in content1:
match1 = pattern1.search(line)
if match1:
for i in matches:
if i == match1.group(1):
key, value = i, match1.group(2)
matches1.append((value, key))
# 去重
df = pd.DataFrame(matches1, columns=["字条", "对应国际化key"])
df = df.drop_duplicates()
# 输出
df.to_excel("D:\\desktop\\workSpace\\index.xlsx", index=False)
#需要两个包:pandas、openpyxl
#pip install pandas
#pip install openpyxl
代码解释
打开名为 “C:\Users\yxj\Desktop\workSpace\index.txt” 的文件,并读取文件内容到变量 content 中。
with open('D:\\desktop\\workSpace\\index.txt', 'r', encoding = 'UTF-8') as f:
content = f.read()
使用正则表达式 r’spring:message code=“(.*?)”’ 在 content 中查找匹配的字符串。匹配结果保存在列表 matches 中。
pattern = r'spring:message code=\"(.*?)\"'
matches = re.findall(pattern, content)
打开名为 “C:\Users\yxj\Desktop\workSpace\lang.txt” 的文件,并逐行读取文件内容到列表 content1 中。
with open("D:\\desktop\\workSpace\\lang.txt", "r", encoding = "UTF-8") as f:
content1 = f.readlines()
使用正则表达式 r"(\w+)=(.*)" 对 content1 中的每一行进行匹配。匹配的结果保存在列表 matches1 中。
pattern1 = re.compile(r"(\w+)=(.*)")
matches1 = []
对于每个 matches 中的元素,遍历 matches1 中的每一行。如果匹配成功,将匹配的结果以 (value, key) 的形式添加到 matches1 中。
for line in content1:
match1 = pattern1.search(line)
if match1:
for i in matches:
if i == match1.group(1):
key, value = i, match1.group(2)
matches1.append((value, key))
使用 pandas 库将 matches1 转换为数据框 df,并设置列名为 “字条” 和 “对应国际化key”。
df = pd.DataFrame(matches1, columns=["字条", "对应国际化key"])
去除数据框中的重复行。
df = df.drop_duplicates()
将数据框保存为名为 “C:\Users\yxj\Desktop\workSpace\index.xlsx” 的 Excel 文件,其中不包含索引列。
df.to_excel("D:\\desktop\\workSpace\\index.xlsx", index=False)
在js中嵌套引入的国际化字条
import re
import pandas as pd
with open('D:\\desktop\\workSpace\\mainjs.txt', 'r', encoding = 'UTF-8') as f:
content = f.read()
# 待匹配的字符串
text = " spring_lang.oss_Analysis_installationTime,"
a = '(?<=spring_lang.).*?(?=,|\s|\'|\"|\)|;)'
# pattern = r"quick\s+brown\s+(\w+)\s+jumps"
matches = re.findall(a, content)
# print(matches)
pattern1 = re.compile(r"(\w+)=(.*)")
with open('D:\\desktop\\workSpace\\langjsp.txt', 'r', encoding = 'UTF-8') as f:
# 以数组的形式读入 数组2
lines = f.readlines()
result = []
for key in matches:
for line in lines:
if re.search(key, line):
result.append(re.findall(r'code="(.+?)"', line)[0])
# result就是key值
# print(result)
# 读取真正的lang包
with open("D:\\desktop\\workSpace\\lang.txt", "r", encoding = "UTF-8") as f:
content1 = f.readlines()
# print(content1)
pattern1 = re.compile(r"(.*)=(.*)")
matches1 = []
for line in content1:
match = pattern1.search(line)
if match:
# print(match)
for i in result:
if i == match.group(1):
key, value = i, match.group(2)
matches1.append((value, key))
print(result)
df = pd.DataFrame(matches1, columns=["字条", "对应国际化key"])
df = df.drop_duplicates()
# 将 DataFrame 输出到 Excel 文件中
df.to_excel("D:\\desktop\\workSpace\\index.xlsx", index=False)
使用时需要创建以下几个目录
- index.txt为jsp页面
- index.xlsx为输出字条与对应的key值
- lang.txt为语言包
- langjsp.txt为存储封装过的lang的jsp文件
- mainjs.txt为有引用国际化字条的js文件
格式
-
index.txt
<div> <div class="sys_tab_box mb_15"> <ul class="sys_tab_list flex_center"> <li authport="2-2-1"><a href="<%=request.getContextPath()%>/plantbC/plantDevice/getInvPage" class="fs_18"><i class="iconfont mr_5"></i> <spring:message code="update_common_inv_sn"/><!-- 逆变器--> </a></li> <li authport="2-2-2"><a href="<%=request.getContextPath()%>/plantbC/plantDevice/getDatalogPage" class="fs_18"><i class="iconfont mr_5"></i> <spring:message code="device_datalog"/><!-- 数据采集器--> </a></li> <li class="curr" authport="2-2-3"><a href="<%=request.getContextPath()%>/plantbC/plantDevice/getMeterPage" class="fs_18"><i class="iconfont mr_5"></i> <spring:message code="work_meter"/><!-- 智能电表--> </a></li> <li authport="2-2-4"><a href="<%=request.getContextPath()%>/plantbC/plantDevice/getEnvPage" class="fs_18"><i class="iconfont mr_5"></i> <spring:message code="work_env"/><!-- 环境监测仪--> </a></li> </ul> </div>
-
lang.txt
################################# 汉语: 2014-11-12 ######################################## login_login=监控/运维OSS登录 login_loginOld=旧版 login_down=下载 login_help=帮助 login_nameOrPassError=用户名或密码错误 login_valiCodeWrong=验证码错误 login_singIn=登 录 login_newUser=注 册 login_forgetPass=忘记密码?
-
langjsp.txt
NO:"<spring:message code="service_question_xuhao"/>",//序号 devSer:"<spring:message code="service_question_deviceOrder"/>",//设备序列号 subArrayName:"<spring:message code="asd_Subarray_name"/>",//子阵名称 faultStrNum:"<spring:message code="sdf_Fault_string"/>",//故障组串数 strNum:"<spring:message code="sdf_Total_number_strings"/>",//组串总数 DiagnosisTime:"<spring:message code="new_Diagnosis_time"/>",//诊断时间 new_mission_name:"<spring:message code="new_mission_name"/>",//任务名称 xhb_notice:"<spring:message code="new_prompt"/>",//提示 xhb_details:"<spring:message code="tigo_details"/>",//详情
-
mainjs.txt
var b = compareTime2(minMaxtimeList,minMaxtimeList2);//true为交集 if(b){ oComFn.sysAlert(spring_lang.there_is_a_conflict_in_the_time_interval_selected_by_Fengguping);//峰谷平所选时间区间有冲突,请重选! return false; }else{ return true; }
不会python
ctrl C+V手已抽筋