我的开发环境:

wxPython2.9-win32-docs-demos-2.9.4.0.exe       下载地址  http://www.wxpython.org/download.php

wxPython2.9-win32-2.9.4.0-py27.exe           下载地址  http://www.wxpython.org/download.php

用到了标准库WMI、wx,需要用户自己下载安装WMIba包、wxpython包。

功能:获取本地所有磁盘,一次扫描所有图片格式的文件,包括'.bmp','jpeg','.gif','.psd','.png','.jpg'格式。

获取图片的全路径,通过logging模块将扫描结果写入文件scanpicture.log。用户也可导出该log文件,保存到自己选择的目录

自定义扫描功能暂时未添加。

扫描过程是通过threading.Thread模块开启线程实现。

效果截图:

重点:

1、如何获取本地所有磁盘信息?

通过WMI模块,objWmi = wmi.WMI(); 产生一个对象,[disk.Caption for disk in objWmi.Win32_LogicalDisk(DriveType=3)]即本地的磁盘列表,如[u'C:', u'D:', u'E:', u'F:'],还可通过disk.FreeSpace, disk.Size分别获取磁盘可用空间、磁盘大小,单位是byte

2、如何快速全路径扫描?

使用os.walk()即可

3、如何在扫描过程中停止扫描?

使用线程实现。

下面是详细代码:

1 #! /usr/bin/env python

2 #coding: utf-8

3

4 importwmi5 importwx6 importlogging7 importtime8 importos9 importthreading10 from shutil importcopy11

12

13 logging.basicConfig(level=logging.DEBUG,14 format='%(asctime)s %(message)s',15 datefmt='%Y-%m-%d_%H:%M:%S.%U',16 filename='scanpicture.log',17 filemode='w')18

19 #自定义日志Handler来接收日志数据

20 classMyLogHandler(logging.Handler):21 def __init__(self,obj):22 logging.Handler.__init__(self);23 self.Object =obj;24

25 defemit(self,record):26 if record.levelno

30 classMyFrame(wx.Frame):31 def __init__(self):32 wx.Frame.__init__(self,parent=None,title="扫描本地图片",33 pos=(100,100),size=(1180,600));34 c =wmi.WMI();35 self.lstDisks = [disk.Caption for disk in c.Win32_LogicalDisk (DriveType=3)];36 self.buildUI();37 self.CenterOnScreen()38

39 defbuildUI(self):40 self.box1 =wx.BoxSizer(wx.HORIZONTAL);41 self.text = wx.TextCtrl(parent=self,style=wx.TE_AUTO_SCROLL|wx.TE_MULTILINE);42 self.box1.Add(self.text,1,wx.ALL|wx.EXPAND,5,5);43 self.box2 =wx.BoxSizer(wx.VERTICAL);44 self.btn1 = wx.Button(parent=self,label="全盘扫描");45 self.box2.Add(self.btn1,1,wx.ALL|wx.EXPAND,5,0);46 self.btn2 = wx.Button(parent=self,label="停止扫描");47 self.box2.Add(self.btn2,1,wx.ALL|wx.EXPAND,5,0);48 self.btn3 = wx.Button(parent=self,label="自定义扫描");49 self.box2.Add(self.btn3,1,wx.ALL|wx.EXPAND,5,0);50 self.btn4 = wx.Button(parent=self,label="导出数据");51 self.box2.Add(self.btn4,1,wx.ALL|wx.EXPAND,5,0);52 self.box1.Add(self.box2,0,wx.NORMAL,0,0);53 self.SetSizer(self.box1);54

55 self.text.SetEditable(False);56 self.btn1.Enable();57 self.btn2.Disable();58

59 self.btn1.Bind(wx.EVT_BUTTON,self.OnButton1Event);60 self.btn2.Bind(wx.EVT_BUTTON,self.OnButton2Event);61 self.btn3.Bind(wx.EVT_BUTTON,self.OnButton3Event);62 self.btn4.Bind(wx.EVT_BUTTON,self.OnButton4Event);63

64 handler =MyLogHandler(self.text);65 logging.getLogger().addHandler(handler);66

67 defOnButton1Event(self,event):68 self.btn1.Disable();69 self.btn2.Enable();70 #检测日志,超过指定日志大小,就清空日志列表

71 if len(self.text.GetValue())>1024:72 self.text.SetValue('');73 self.scan =ScanPicture(self.lstDisks)74 #daemonic为True时,表示主线程结束时子线程也要跟着退出

75 self.scan.setDaemon(True)76 self.scan.start()77

78 defOnButton2Event(self,event):79 self.scan.StopScan()80 self.btn1.Enable();81 self.btn2.Disable();82 print(os.getpid())83

84 defOnButton3Event(self,event):85 '''

86 @summary: 自定义扫描87 '''

88 pass

89

90 defOnButton4Event(self,event):91 '''

92 @summary: 将扫描结果导出,并保存到指定地方93 '''

94 userPath = os.getcwd().decode('gb2312')95 print(userPath)96 dlg = wx.DirDialog(self, "Choose a directory:",97 defaultPath=userPath,98 style=wx.DD_DEFAULT_STYLE99 #| wx.DD_DIR_MUST_EXIST

100 #| wx.DD_CHANGE_DIR

101 )102 if dlg.ShowModal() ==wx.ID_OK:103 savepath =dlg.GetPath()104 if savepath ==userPath:105 return

106 try:107 copy(os.path.join(userPath,'scanpicture.log'), savepath)108 strResult = "导出文件成功!"

109 except:110 strResult = "导出文件失败!"

111 dlg =wx.MessageDialog(self, strResult,112 'A Message Box',113 wx.OK |wx.ICON_INFORMATION114 #wx.YES_NO | wx.NO_DEFAULT

115 #| wx.CANCEL | wx.ICON_INFORMATION

116 )117 dlg.ShowModal()118 dlg.Destroy()119

120 classScanPicture(threading.Thread):121 def __init__(self, lstDisks):122 threading.Thread.__init__(self)123 self.dicks =lstDisks124 self.flag =True125

126 defrun(self):127 for path inself.dicks:128 self.GetScanResult(path)129

130 defGetScanResult(self, path):131 '''

132 @summary: 获取扫描结果133 '''

134 lstImgExt = ['.bmp','jpeg','.gif','.psd','.png','.jpg'];135 for root, dirs, files in os.walk(path, topdown=False):136 for onefile infiles:137 if notself.flag:138 return

139 strPath =os.path.join(root, onefile);140 if strPath[-4:] inlstImgExt:141 logging.error(strPath);142

143 defStopScan(self):144 '''

145 @summary: 设置flag标志位,停止扫描146 '''

147 self.flag =False148

149 classMyApp(wx.App):150 defOnInit(self):151 self.win =MyFrame();152 self.win.Show(True);153 self.SetTopWindow(self.win);154 returnTrue;155

156 if __name__ == "__main__":157 app =MyApp();158 app.MainLoop();

View All Code

注:第一篇随笔,给自己加油,希望自己能加倍努力,实现理想。

python获取所有盘符_自动扫描所有本地磁盘,获取所有图片信息相关推荐

  1. bat脚本中获取上级目录_批处理bat命令--获取当前盘符和当前目录和上级目录

    批处理命令获取当前盘符和当前目录 %~d0 是当前盘符 %cd% 是当前目录 可以用echo %cd%进行打印测试 以下例子是命令行编译Visual Studio编写的程序: @echo off se ...

  2. bat脚本中获取上级目录_转载 批处理bat命令--获取当前盘符和当前目录和上级目录...

    批处理命令获取当前盘符和当前目录 %~d0 是当前盘符 %cd% 是当前目录 可以用echo %cd%进行打印测试 以下例子是命令行编译Visual Studio编写的程序: @echo off se ...

  3. bat脚本中获取上级目录_批处理bat命令 获取当前盘符和当前目录和上级目录的代码...

    批处理命令获取当前盘符和当前目录 当前盘符:%~d0 当前路径:%cd% 当前执行命令行:%0 当前bat文件路径:%~dp0 当前bat文件短路径:%~sdp0 测试 echo 当前盘符:%~d0 ...

  4. 获取电脑盘符 tcy

    你可在dos或python中获取电脑盘符 import os,subprocess,re from subprocess import PIPEdef DiskSymbol():#获取系统盘符&quo ...

  5. 批处理bat命令--获取当前盘符和当前目录和上级目录

    1. 批处理命令获取当前盘符和当前目录 @echo off rem 设置环境变量延迟 setlocal EnableDelayedExpansion echo 当前正在运行的批处理文件所在路径:!cd ...

  6. c# 获取路径的盘符_c#获取驱动器盘符

    在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数 ...

  7. u盘固定盘符_浅析固定U盘盘符的原理

    研究固定U盘盘符从哪里开始?从注册表来研究是最好的.为什么要从注册表来研究磁盘与盘符?很简单,操作注册表速度最快,这不同于使用工具软件从低层进行查询,其实PECMD的SHOW命令就是低层操作,操作复杂 ...

  8. bat命令 获取当前盘符 路径 写环境变量

    批处理命令获取当前盘符和当前目录 当前盘符:%~d0 当前路径:%cd% 当前执行命令行:%0 当前bat文件路径:%~dp0 当前bat文件短路径:%~sdp0 其他命令 echo 打印字符串 se ...

  9. U盘问题,插入时只有声音,没有显示,在”计算机管理”的“磁盘管理”中,上面看不到盘符”H:”,下面可以看到”磁盘1 可移动无媒

    问题:U盘问题,插入时只有声音,没有显示,在"计算机管理"的"磁盘管理"中,上面看不到盘符"H:",下面可以看到"磁盘1 可移动无 ...

最新文章

  1. 小程序判断数组的index是否为空_微信小程序之购物车功能(仅学习)
  2. 09、redis哨兵的多个核心底层原理的深入解析(包含slave选举算法)
  3. TableAdapter 概述
  4. 搜索打表大找规律 (hdu2045)
  5. 11.05 scrum report
  6. java Mina sftp_java – 使用Apache Mina作为模拟/内存SFTP服务器进行单元测试
  7. linux之lsusb命令和cd -命令使用总结
  8. mybatis学习(16):不使用接口的方式
  9. donotage标记、MTU及MTU不匹配问题、OSPF邻居状态记录
  10. linux系统制作win安装盘,在Ubuntu Linux下制作Windows 启动安装 USB盘
  11. 获取Repeater中Footer/HeaderTemplate 中的控件
  12. 学习.net设计规范记录
  13. 达观数据:Tornado原理浅析及应用场景探讨
  14. Linux命令——parted
  15. Ajaxfileupload上传多张图片
  16. Dancing Line、网易蜗牛读书——创新性分析
  17. 观点| 如何避免GitHub那样断网43秒瘫痪 24 个小时?
  18. log日志输出到文件:
  19. 数量金融学(7):连续复利
  20. 魏小亮:如何选择硅谷的IT公司

热门文章

  1. 流行的权限管理 gem devise的定制
  2. 【2021-12-22】【Kotlin】Type inference failed. Expected type mismatch: inferred type is HashSet but Set
  3. A4纸张两面打印、每面打印2页的打印机设置
  4. 互联网运营面试题_产品运营面试常见问题
  5. 微信公众号的类型和功能
  6. Fabric-ca与现有fabric网络组织绑定
  7. matlab课表编排程序实例,编排课程表的一点心得
  8. 使用JiaoZiVideoPlayer播放视频方向横过来出现的问题
  9. 【Android -- 面试】简历模板
  10. netty权威指南笔记-以回车换行结尾的消息如何处理半包问题