genstr.py
#!/usr/bin/python
#-*- coding:utf-8 –*- import os
import sys
import re
import shutil
import xlrd
import xlwt
import getopt
import math
from xlutils.copy import copy '''
脚本使用:
设置strUiPorject ui项目名称,取值如下 "mstar"/"formal"/"haier"/"videocon"/"bbk"/"atv_project"
删除无用字串: ./genstr -d
特殊标记的字串优先排序: ./genstr -p
给已整理好优先级高的字串添加strMark..../genstr -a
读取 优先级字串整理.h 中的字串进行比对添加标记(未整理)./genstr -c 脚本功能:
1、根据strUiPorject设置的UI名称,迭代过滤UI目录的所有源文件和头文件,获取项目使用字串总数,并删除UIL多余字串
2、对某一种语言做特殊标记strMark,标记的字串会放在翻译的最前面
3、mstar优先级字串整理在mstarPrimaryString.h,已使用字串整理在UsedString.h中,
formal优先级字串整理在PrimaryString.h
执行过程:
1、设置UI项目名称
2、根据UI名称,配置过滤路径和UIL删除路径(filterPath/strUilPath)
3、再根据配置的路径执行过滤和删除动作 注意:
SourceCode中,有一些是 TV_IDS_String_ID+Offset方式获取新字串的,这些字串要手动加到脚本,以防误删
如:TV_IDS_String_GMT_0 字串
''' #=======注意此处设置UI项目================================#
#=="mstar"/"formal"/"haier"/"videocon"/"bbk"/"atv_project"=#
strUiPorject = "mstar"
#========================================================# g_deleteMode = 0
g_priorityMode = 0
g_AddmarkMode = 0
g_CompareMode = 0 setStr = set()
tupleStr = ()
strMark = "aaaa" #=======================以下不需要设置=======================#
if "bbk" in strUiPorject:
filterPath = "aps/application/radisson/formal"
strUilPath = "aps/application/radisson/formal/UI_Project/TV_UIProject/Languages"
elif "formal" in strUiPorject:
filterPath = "aps/application/radisson/formal"
strUilPath = "aps/application/radisson/formal/UI_Project/TV_UIProject_new/Languages"
else:
filterPath = "aps/application/radisson/%s" % strUiPorject
strUilPath = "aps/application/radisson/%s/UI_Project/TV_UIProject/Languages" % strUiPorject
gamePath = "aps/game" listPath = [filterPath,gamePath] def filterUsefulString():
listStrId = []
for path in listPath:
for dirPath, dirNames, fileNames in os.walk(path):
for sourceFile in fileNames:
filePath = dirPath+"/"+sourceFile
if (re.search(".*\.c.*",sourceFile) or re.search(".*\.h.*",sourceFile)) \
and sourceFile != "TV_strid.h":
for line in open(filePath,"r"):
if "TV_IDS_String" in line:
if line.count("TV_IDS_String") > 2:
print "\n\nthe number of string are more than 2 in a row \n\n "
print sourceFile
print "\n"
continue
if re.search(".*TV_(IDS_String\w*).*TV_(IDS_String\w*).*",line):
tupleStr=re.search(".*TV_(IDS_String\w*).*TV_(IDS_String\w*).*",line).groups()
for i in range(len(tupleStr)):
setStr.add(tupleStr[i])
else:
setStr.add(re.search(".*TV_(IDS_String\w*).*",line).group(1))
elif "TV_IDS_Game_Menu_OSD_String" in line:
setStr.add("IDS_Game_Menu_OSD_String") print "\n\n程序中共使用 %d 个字串。\n保存在当前目录 UsedString.h-文件中\n\n" % len(setStr)
for line in setStr:
listStrId.append(line)
listStrId.append("\n")
open("UsedString.h","w").writelines(listStrId) '''
#读EXCEL到映射表
def excelSetting()
setElStr = set()
mapStr = {}
listFirst = []
setDiff = set()
book = xlrd.open_workbook(r'Languages.xls')
sheet = book.sheet_by_index(0) listFirst = sheet.row_values(0) for row in range(sheet.nrows):
cellStr = str(sheet.cell(row,0).value)
cellStr.rstrip()
if cellStr in setStr:
mapStr[cellStr] = sheet.row_values(row) #setElStr = set(mapStr.keys())
#setDiff = setElStr - setStr #写EXCEL
wboot = xlwt.Workbook()
sheet = wboot.add_sheet("Language")
#操作第一行,抬头
for col in range(len(listFirst)):
sheet.write(0,col,listFirst[col]) #其它行
row = 1
for (k,v) in mapStr.items():
for col in range(len(v)):
sheet.write(row,col,v[col])
row = row + 1
wboot.save(r'Language_.xls') '''
#处理UIL文件,对比setStr集合,删除无用字串
def deleteString():
delCount = 0
lanList = []
for dirPath,dirNames,fileNames in os.walk(strUilPath):
for sourceFile in fileNames:
filePath = dirPath + "/" + sourceFile
for line in open(filePath,"r"):
#==============================================#
#有些字串在code中是以偏移量的方式使用,不能删除
if "IDS_String_GMT_" in line:
lanList.append(line)
continue
elif re.search(".*IDS_String_\d{1,2}\".*",line) or ("IDS_String_LNB" in line):
lanList.append(line)
continue
# ==============================================# if "<String ID=" in line:
if re.search("\s*<String ID=\"(\w*)\".*",line).group(1) in setStr:
lanList.append(line)
else:
delCount = delCount+1
else:
lanList.append(line)
open(filePath,"w").writelines(lanList)
print(sourceFile + "删除 %s" %delCount)
lanList = []
delCount = 0 #处理UIL文件,迭代lanFist集合,标记字串放在UIL文件前面
def priorityString():
lanFist = []
lanList1 = []
lanList2 = []
lanList3 = []
pat = re.compile(".*\"(IDS_String\w*)\".*")
for line in open(strUilPath+"/English.uil","r").readlines():
if strMark in line and pat.search(line):
lanFist.append(pat.search(line).group(1))
open("PrimaryString.h", "a").writelines([x + "\n" for x in lanFist])
print "优先级字串共%d,如下:" %len(lanFist)
print lanFist for dirPath, dirNames, fileNames in os.walk(strUilPath):
for sourceFile in fileNames:
filePath = dirPath + "/" + sourceFile
for line in open(filePath, "r"):
if pat.search(line) and pat.search(line).group(1) in lanFist:
line = line.replace(strMark,"")
lanList1.append(line)
elif "IDS_String_spliteLine" in line:
lanList3.append(line)
else:
lanList2.append(line)
if(len(lanList1) and len(lanList2)>=3):
lanList2 = lanList2[0:2] +lanList1 + lanList3+lanList2[2:]
open(filePath, "w").writelines(lanList2)
lanList1 = []
lanList2 = [] #给已整理好优先级高的字串添加strMark
def AddMark():
StringList = []
a = 0
for line in open(strUilPath+"/English.uil","r") :
if ("<String ID=" in line):
if re.search("IDS_String_spliteLine",line):
a = 1
elif(a == 0):
line = line.replace('Value="','Value="'+strMark)
StringList.append(line)
open(strUilPath+"/English.uil","w").writelines(StringList)
print "\n添加StrMark完成\n" #读取 优先级字串整理.h 中的字串进行比对添加标记(未整理)
def CompareAddMark():
strSet = set()
strList = []
for line in open("PrimaryString.h", "r"):
strSet.add(re.search(".*(IDS_String_.*).*",line).group(1))
print strSet
for line in open(strUilPath+"/English.uil","r") :
if "<String ID=" in line:
if re.search("\s*<String ID=\"(\w*)\".*", line).group(1) in strSet:
print "a\n"
line = line.replace('Value="','Value="'+strMark)
strList.append(line)
open(strUilPath+"/English.uil","w").writelines(strList) def fun_parse_InputParam():
global g_deleteMode
global g_priorityMode
global g_AddmarkMode
global g_CompareMode
try:
opts, args = getopt.getopt(sys.argv[1:], 'dpac')
except getopt.GetoptError, err:
#print str(err)
sys.exit() for op, value in opts:
if op == "-d":
g_deleteMode = 1
elif op == "-p":
g_priorityMode = 1
elif op == "-a":
g_AddmarkMode = 1
elif op == "-c":
g_CompareMode = 1
else:
print("unhandled option")
sys.exit() if __name__ == "__main__":
fun_parse_InputParam()
if g_deleteMode:
filterUsefulString()
deleteString()
if g_priorityMode:
priorityString()
if g_AddmarkMode:
AddMark()
if g_CompareMode:
CompareAddMark()
genstr.py的更多相关文章
- python调用py中rar的路径问题。
1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...
- Python导入其他文件中的.py文件 即模块
import sys sys.path.append("路径") import .py文件
- import renumber.py in pymol
cp renumber.py /usr/local/lib/python2.7/dist-packages/pymol import renumber or run /path/to/renumber ...
- python gettitle.py
#!/usr/bin/env python # coding=utf-8 import threading import requests import Queue import sys import ...
- 解决 odoo.py: error: option --addons-path: The addons-path 'local-addons/' does not seem to a be a valid Addons Directory!
情况说明 odoo源文件路径-/odoo-dev/odoo/: 我的模块插件路径 ~/odoo-dev/local-addons/my-module 在my-module中创建了__init__.py ...
- caffe机器学习自带图片分类器classify.py实现输出预测结果的概率及caffe的web_demo例子运行实例
caffe机器学习环境搭建及python接口编译参见我的上一篇博客:机器学习caffe环境搭建--redhat7.1和caffe的python接口编译 1.运行caffe图片分类器python接口 还 ...
- 【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优
libsvm中有进行参数调优的工具grid.py和easy.py可以使用,这些工具可以帮助我们选择更好的参数,减少自己参数选优带来的烦扰. 所需工具:libsvm.gnuplot 本机环境:Windo ...
- MySqlNDB使用自带的ndb_setup.py安装集群
在用Mysql做集群时,使用Mysql的NDB版本更易于集群的扩展,稳定和数据的实时性. 我们可以使用Mysql自带的工具进行集群安装与管理:ndb_setup.py.位于Mysql的安装目录bin下 ...
- 将做好的py文件打包成模块,供别人安装调用
现在要将写完的3个py文件,打包. 步骤: 1.新建一个文件夹setup(名字随便取),在setup文件夹下,再新建一个文件夹financeapi. 2.将上面4个py文件拷贝至financeapi文 ...
随机推荐
- 【转】cJSON 使用笔记
缘 起 最近在stm32f103上做一个智能家居的项目,其中选择的实时操作系统是 rt_thread OS v1.2.2稳定版本,其中涉及到C和java(android)端数据 ...
- 修复Mysql主从不同步shell
使用第三方工具MySQL Enterprise Monitor,MySQL企业版监控工具.MONyog – MySQL Monior and Advisor,MONyog大家都不陌生,windows下 ...
- Ubuntu16.04常用软件源
这篇博文的,主要目的是为了方便我和大家安装软件.我将我安装过的所有软件包的源列在此处. Google Chrome sudo wget https://repo.fdzh.org/chrome/goo ...
- 【POJ3694】Network
题目大意:给定一个 N 个点,M 条边的无向图,支持 Q 次操作,每次可以向该无向图中加入一条边,并需要回答当前无向图中桥的个数. 题解:(暴力:Q 次 Tarjan) 先进行一次 Tarjan 求出 ...
- 智能指针unique_ptr
转自:https://www.cnblogs.com/DswCnblog/p/5628195.html 成员函数 (1) get 获得内部对象的指针, 由于已经重载了()方法, 因此和直接使用对象是一 ...
- JSON必知必会,浅尝辄止的整理
在使用JSON时常见的安全漏洞通常发生在JavaScript从服务器获取到一段JSON字符串并将其转化为JavaScript对象时, 在定位JSON安全问题时,应该记住三件事情: 1.不要使用顶级数组 ...
- 锋利的jQuery复制粘贴(一)
两者区别:$(document).ready();网页中多有dom结构绘制完毕后就执行, 可能dom元素关联的东西没用加载完.[若有多个弹框,均可以执行输出] window.onload 必须等待多有 ...
- WCF开发实战系列三:自运行WCF服务
WCF开发实战系列三:自运行WCF服务 (原创:灰灰虫的家 http://hi.baidu.com/grayworm)上一篇文章中我们建立了一个WCF服务站点,为WCF服务库运行提供WEB支持,我们把 ...
- 静态代码块、构造代码块、构造方法优先级(重点)-------java基础总结
package com.mon11.day11; /** * 类说明 : * @author 作者 : chenyanlong * @version 创建时间:2017年11月11日 */ publi ...
- 对于nginx配置文件中的fastcgi_param的配置错误
在centos中搭建LNMP的时候,遇到了一个问题 在浏览器中访问.php文件的时候,nginx不能正常解析,页面返回404,后来百度了一下,发现了问题 在nginx的配置文件nginx.conf中的 ...