工具用途
程序员在做项目的时候通常会接收到很多资源,如图片、音频等,在项目完成过程中会遭遇诸多需求改动,又会有新的资源被引入项目,等到项目完成的时候会遭遇项目中有很多资源占据空间以至于打出来的包太大,其主要原因就是因为有很多资源根本没有用,却还在res中,这时候就要删除旧的,没用的资源以达到减小包大小的目的。接下来要介绍的这款工具就是基于这种情况下被开发出来的,方便程序员不用一个个目录的检索查看资源是否是没用的,也不用担心会误删到有用的资源。利用这个工具,我们就可以以最轻松的方法做到以前要花费不少时间跟精力才能完成的事。
工具原理
通过检索scripts中代码来搜索res中资源是否存在于代码中,如果在代码中能找到某张图片或者音频的资源的路径或者字符串,那就说明这张图片或者音频是有用的,反之找不到路径或者字符串,就是无用的,属于需要被删除的资源。由于多余的资源一般只会存在于img,snd,i18n这三个文件夹中,所以,本款工具只删除这三个文件夹中的无用的多余资源。
工具代码
以下这段代码功能是拖拽bbframework文件到工具界面,就能在编辑框显示路径。如果拖入的文件夹中没有scripts和res文件夹,或者拖入的是文件,则会报错。
class App(QMainWindow, Ui_MainWindow):
"""
Class documentation goes here.
"""
def __init__(self, parent = None):
"""
Constructor
"""
QMainWindow.__init__(self, parent)
self.setupUi(self)
import QtUtil
import os
#拖拽文件夹
self.setAcceptDrops(True)
QtUtil.setFileDragIn(self, self.output_dirinfo)
def output_dirinfo(self, dragInto):
"""
拖拽事件.
"""
# 如果拖进来的是文件夹
if os.path.isdir(dragInto) and os.path.exists(dragInto+'/scripts') and os.path.exists(dragInto+'/res'):
bbframework = self.lineEdit.setText(dragInto)
接下来是导出scripts中的所有代码到一个.lua文件中
#复制scripts文件夹里所有文件的内容到.lua文件中
def scripts(self,into):
for root, dirs, files in os.walk( str(into)+'/scripts' ):
for file in files:
dir = str(root)+'/'+str(file)
#打开文件
f = open(dir,'r')
#读取文件
scripts = f.read()
fd = open(str(into)+'.lua','a')
fd.write(scripts)
然后检索res中img,snd,i18n中的文件是否存在于scripts中,不存在则删除
#检索scripts中是否出现img中的图片文件,如果没有则删除文件
def img(self,into): for root, dirs, filesd in os.walk(str(into)+'/res/img'): rd = open(str(into)+'.lua','r') a = rd.read() for filed in filesd: dir = str(root)+'/'+str(filed) dird = dir.replace('\','/')
#查找x4,x2中的文件的相对路径,不存在scripts中则删除 if ('x4/box' in dird) or ('x2/box'in dird) or ('x4/g'in dird) or ('x2/g'in dird) or ('x4/loading'in dird) or ('x2/loading'in dird): pass elif (str(filed) in str(a)) :
#查找路径中的x4字符 dirname = dird.find("x4") dirname2 = dird.find("x2") if dird[dirname+3:] in a: pass elif dird[dirname2+3:] in a: pass else: os.remove(str(dird)) else: os.remove(str(dird))
#检索scripts中是否出现snd中的声音文件,如果没有则删除 def snd(self,into): for root, dirs, filesd in os.walk(str(into)+'/res/snd'): rd = open(str(into)+'.lua','r') a = rd.read() for filed in filesd: dir = str(root)+'/'+str(filed) dird = dir.replace('\','/') if (str(filed) in str(a)) :
#查找snd字符 dirname = dird.find("snd") if dird[dirname+4:] in a: pass else: os.remove(str(dird)) else: os.remove(str(dird)) #检索scripts中是否出现i18n中的图片与声音文件,如果没有则删除 def i18n(self,into): for root, dirs, filesd in os.walk(str(into)+'/res/i18n'): rd = open(str(into)+'.lua','r') a = rd.read() for filed in filesd:
#绝对路径 dir = str(root)+'/'+str(filed) dird = dir.replace('\','/') if (str(filed) in str(a)): dirname = dird.find("x4") dirname2 = dird.find("x2") else: os.remove(str(dird))
最后调用这些方法
def output_dirinfo(self, dragInto):
"""
拖拽事件.
"""
# 如果拖进来的是文件夹
if os.path.isdir(dragInto) and os.path.exists(dragInto+'/scripts') and os.path.exists(dragInto+'/res'):
bbframework = self.lineEdit.setText(dragInto)
self.scripts(dragInto)
self.img(dragInto)
self.snd(dragInto)
self.i18n(dragInto)
os.remove(str(dragInto)+'.lua')
QtUtil.showOkDialog(self, u'提示', u'多余资源已删除')
这样就完成了代码的编写,运行之后就会出现一个窗口
将bbframework文件夹拖入窗口,工具就会自动替你删除res下多余的资源,一秒钟解决烦恼。
本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4494881.html