`
zengleo
  • 浏览: 19438 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

python的音乐本地搜索统计的小工具(速度优化版)

阅读更多
加入了stackless微线程,速度大大的提高!!
#coding=gb2312

import os
import fnmatch
import wx
import re
import time
import stackless


def get_allfile_name(path):   #获得全部文件夹的文件名
    l=[]
    for p,d,f in os.walk(path):
        for i in f:
            l.append(os.path.join(p,i))

    return l


class Search_music(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"音乐查找 v2.0",size=(300,330),style=wx.DEFAULT_FRAME_STYLE^wx.RESIZE_BORDER)
        panel=wx.Panel(self,-1)
        self.mymusicList=['mp3','wav','wma','cue']    
#------------------------------------------------------------------------------ 文件夹
        self.st1=wx.StaticText(panel,-1,"给我一个路径 ,我将翻透你的硬盘 :",(15,15))
        self.st1_pos_y=self.st1.GetPosition().y+self.st1.GetSize().height
        self.t1=wx.TextCtrl(panel,-1,"",style=0,size=(185,25),pos=(15,self.st1_pos_y+10))
        self.t1_pos_x=self.t1.GetPosition().x+self.t1.GetSize().width+10
        self.b1=wx.Button(panel,-1,"浏览",pos=(self.t1_pos_x,self.st1_pos_y+10),size=(45,25),style=0)
        self.Bind(wx.EVT_BUTTON, self.GetDir, self.b1)


#------------------------------------------------------------查询数据类型-----------------
        self.st2=wx.StaticText(panel,-1,"音乐查询类型 :",(15,self.st1_pos_y+45))
        self.st2_pos_y=self.st2.GetPosition().y+self.st2.GetSize().height
        self.st2_pos_x=self.st2.GetPosition().y+self.st2.GetSize().width
        lb=wx.CheckListBox(panel,-1,(15,self.st2_pos_y+10),wx.DefaultSize,self.mymusicList)
        lb.SetSelection(0)
        self.lb=lb
        pos_y=lb.GetPosition().y+lb.GetSize().height+10
        pos_x=lb.GetPosition().x+lb.GetSize().width+15
#------------------------------------------------------------------------------ 统计面板
        multiLabel=wx.StaticText(panel,-1,"统计结果",(self.st2_pos_x-10,self.st1_pos_y+45))
        multiLabel_pos_y=multiLabel.GetPosition().y+multiLabel.GetSize().height+15
        self.multiText=wx.TextCtrl(panel,-1,
            "",size=(140,190),style=wx.TE_MULTILINE,pos=(self.st2_pos_x-10,self.st2_pos_y+10))#创建一个文本控件
        self.multiText.SetInsertionPoint(0)#设置插入点
        
#------------------------------------------------------------------------------ 进度条
        self.gauage=wx.Gauge(panel,-1,100,(15,pos_y+40),(70,20))
        self.gauage.SetBezelFace(3)
        self.gauage.SetShadowWidth(3)                                
#-------------------------------------------------------------------------------总数据发送按钮        
        btn=wx.Button(panel,-1,'搜索', (15, pos_y+70))
        self.Bind(wx.EVT_BUTTON,self.OnTestButton,btn)      
       
 
    def OnTestButton(self,event):
        dict={}
        all_word=[]  #所有要显示在面板上的
        all_songs_num=0   #歌曲总数
        mycue_number=0
        
            
            
        for i in self.lb.GetCheckedStrings():#做一个字典{文件类型:[文件路径名]}
            dict[i]=[]

        if self.t1.GetValue()=='' or self.lb.GetCheckedStrings()==():
            wx.MessageBox('靓仔!信息不完整哦!','出错了',wx.ICON_EXCLAMATION)
            s=''
        elif not os.path.isdir(self.t1.GetValue()):
            wx.MessageBox('靓仔!路径不合法!','出错了',wx.ICON_EXCLAMATION)
            s=''
        else:
            self.gauage.SetValue(10) #标记进度条
                  
            All_files=get_allfile_name(self.t1.GetValue())
            def my_stackless_task(my_str):
                for f in All_files:
                    if fnmatch.fnmatch(f,'*.%s'%my_str):
                        dict[my_str].append(f)
                           
            self.gauage.SetValue(50) #标记进度条
           # if 'ape' in self.lb.GetCheckedStrings():
            
            for i in self.lb.GetCheckedStrings():
                stackless.tasklet(my_stackless_task)(i)
            stackless.run()
            
            self.gauage.SetValue(90)                    
            for i in self.lb.GetCheckedStrings():
                #print i,len(dict[i])
                if i!='cue':
                    all_songs_num=all_songs_num+len(dict[i])
                    all_word.append('%s有:%s \n'%(i,len(dict[i])))
                else:
                    the_cue_num=len(dict[i])
                
            if 'cue' in self.lb.GetCheckedStrings() and len(dict['cue'])!=0:
                #print dict['cue'] 
                for mycuefile in dict['cue']:
                    #print mycuefile
                    mycue_number=mycue_number+self.find_audionumber_in_ape(mycuefile)
                all_word.append('ape内曲目:%d'%(mycue_number))   
            
            all_word.insert(0, '歌曲【%s】总数(含ape内音频):%d\n'%(str(self.lb.GetCheckedStrings()),(all_songs_num+mycue_number)))
            
            s="\n".join(all_word)  
            self.gauage.SetValue(100)#标记进度条  
        
            self.multiText.SetValue(s)
            self.gauage.SetValue(0)#标记进度条         
    
    def find_audionumber_in_ape(self,cuefile):  #对所有的cue文件进行操作
        try:
            #print cuefile
            myfile=open(r"%s"%cuefile,'r')
            all_str=myfile.readlines()
            myfile.close()
            all_str.reverse()
            for n in all_str:
                if re.search("^  TRACK",n):
                    break
            p=re.compile('.[0-9][0-9].')
            return int(p.search(n).group())
            
        except:
            errorfile=open('music_error.log','a')
            errorfile.write('\n 时间:%s    文件【%s】找不到了哇\n'%(time.ctime(time.time()),cuefile))
            errorfile.close() 
            return 0  
                 
                
    def GetDir(self,event):
        self.t1.SetValue(wx.DirSelector("我的音乐目录",defaultPath="",style=0,pos=wx.DefaultPosition,parent=None))


if __name__=='__main__':

    app=wx.PySimpleApp()
    frame=Search_music()
    frame.Show()
    app.MainLoop()
    

分享到:
评论

相关推荐

    C/C++/JAVA/Python代码统计工具

    此外,对于大型项目,代码统计工具还可以帮助团队进行性能优化、质量控制和维护性评估。例如,通过分析代码行数与错误率的关系,可以发现潜在的代码质量问题;通过跟踪代码的变化趋势,可以预测项目的未来维护难度。...

    HTMLTestRunner支持Python3版本中文优化版安装包

    这个"HTMLTestRunner支持Python3版本中文优化版"安装包包含了针对Python3的兼容性调整和语言本地化的改进。它使得测试报告中的各种提示信息、错误描述等都能够以中文形式呈现,从而降低理解和使用的难度。 ...

    python 3.8 安装numpy和scipy

    Scipy(Scientific Python)则是一个更高级别的库,它建立在Numpy之上,提供了更多的科学计算工具,如信号处理、优化、插值、线性代数、统计和图像处理等功能。Scipy的安装同样可能遇到网络问题,此时也可以通过.whl...

    统计源代码行数工具exe

    在压缩包"代码行数统计工具[1].rar"中,包含了这个.exe工具的完整版本。解压后,用户只需按照界面提示操作,即可快速获得所需的代码统计报告。值得注意的是,使用任何第三方工具进行代码统计时,都应确保数据的安全...

    Python库 | meilisearch_python_async-0.14.0-py3-none-any.whl

    4. **监控和统计**:库还支持获取索引的统计信息,如文档数量、搜索请求的性能指标等,帮助开发者监控服务状态并优化性能。 5. **错误处理和异常**:库提供了一套完善的错误处理机制,当出现网络问题或MeiliSearch...

    linecount代码统计工具

    总的来说,"Linecount代码统计工具"是开发者和项目经理的得力助手,它能够提供关于项目规模和代码结构的重要信息,帮助优化开发流程,提高工作效率。通过熟练掌握并合理使用这类工具,我们可以更好地管理和维护我们...

    Python-统计你的微信连接多少人包括好友群聊人数并提供去重后的长图结果

    在Python编程领域,微信连接的人数统计涉及到网络爬虫技术和数据处理。这个项目"Python-统计你的微信连接多少人包括好友群聊人数并提供去重后的长图结果"旨在利用Python来实现对微信联系人与群聊成员数量的统计,并...

    一个源码统计行数统计工具

    本文将详细解析“一个源码统计行数统计工具”的特点、功能及如何使用。 首先,该工具的核心功能是统计源码行数。源码行数统计对于开发者和管理者而言具有重要意义。它可以帮助开发者了解项目的规模,评估开发进度,...

    Python 3.7.7_64位正式版.rar

    2. **改进的字典**:Python 3.7对字典进行了优化,实现了**插入顺序保持(Insertion-Order Preservation)**,这意味着迭代字典时会按照插入的顺序进行,这对某些应用场景非常有用。 3. **数据类(Data Classes)**...

    源码_基金小工具V0.2.2

    【源码_基金小工具V0.2.2】是一个基于VB.NET开发的基金查询应用的源代码包,旨在提供给开发者和爱好者一个参考和学习的平台。这个工具的最新版本,V0.2.2,现在可供大家免费下载和使用,但必须遵循版权规定,即在...

    源代码统计工具免费版

    在压缩包中的"源代码统计工具"很可能是这样的一款软件,它可以运行在本地,或者可能是一个在线服务,用于上传和分析代码仓库。使用这样的工具,开发者可以快速获取关于他们项目的重要信息,从而做出更明智的决策,...

    SourceCounter代码统计工具

    **源码计数器——SourceCounter代码统计工具** 在软件开发过程中,理解代码库的规模、结构和维护性是至关重要的。SourceCounter是一款强大的代码统计工具,专为开发者设计,用于快速准确地统计项目代码的行数。它...

    Python-PracticalAI实际编码掌握机器学习PyTorchColabOOML

    在本资源"Python-PracticalAI实际编码掌握机器学习PyTorchColabOOML"中,我们主要关注的是使用Python编程语言以及相关的工具和库来实操机器学习项目。PyTorch是一个流行的深度学习框架,它提供了强大的灵活性和速度...

    Python库 | genepattern-python-1.4.0.tar.gz

    《Python库genepattern-python-1.4.0:基因数据分析的强大工具》 在Python的广阔天地里,有一个专门用于生物信息学领域的强大库——genepattern-python。这个库是genepattern平台的一个组成部分,旨在简化基因表达...

    Python库 | python-string-utils-0.4.0.tar.gz

    Python字符串处理库`python-string-utils`是Python开发者在处理文本数据时的一个强大工具。这个库在版本0.4.0中提供了多种实用的功能,旨在简化和优化字符串操作,提高代码的效率和可读性。在Python中,字符串是常用...

    代码统计工具

    代码统计工具是软件开发过程中非常重要的辅助工具,主要用于量化分析项目的代码量,帮助开发者了解项目的规模、复杂性和维护性。这种工具通常可以处理多种编程语言的源代码,并且允许用户自定义支持的文件格式,以...

    CodeCounter1.0.0(代码统计).zip

    《CodeCounter1.0.0:一款实用的代码统计工具》 在软件开发过程中,代码统计是一项必不可少的任务,它能够帮助开发者了解项目规模,评估工作量,以及进行性能优化。CodeCounter1.0.0正是这样一款专为程序员设计的...

Global site tag (gtag.js) - Google Analytics