python获取所有盘符_自动扫描所有本地磁盘,获取所有图片信息
我的开发环境:
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获取所有盘符_自动扫描所有本地磁盘,获取所有图片信息相关推荐
- bat脚本中获取上级目录_批处理bat命令--获取当前盘符和当前目录和上级目录
批处理命令获取当前盘符和当前目录 %~d0 是当前盘符 %cd% 是当前目录 可以用echo %cd%进行打印测试 以下例子是命令行编译Visual Studio编写的程序: @echo off se ...
- bat脚本中获取上级目录_转载 批处理bat命令--获取当前盘符和当前目录和上级目录...
批处理命令获取当前盘符和当前目录 %~d0 是当前盘符 %cd% 是当前目录 可以用echo %cd%进行打印测试 以下例子是命令行编译Visual Studio编写的程序: @echo off se ...
- bat脚本中获取上级目录_批处理bat命令 获取当前盘符和当前目录和上级目录的代码...
批处理命令获取当前盘符和当前目录 当前盘符:%~d0 当前路径:%cd% 当前执行命令行:%0 当前bat文件路径:%~dp0 当前bat文件短路径:%~sdp0 测试 echo 当前盘符:%~d0 ...
- 获取电脑盘符 tcy
你可在dos或python中获取电脑盘符 import os,subprocess,re from subprocess import PIPEdef DiskSymbol():#获取系统盘符&quo ...
- 批处理bat命令--获取当前盘符和当前目录和上级目录
1. 批处理命令获取当前盘符和当前目录 @echo off rem 设置环境变量延迟 setlocal EnableDelayedExpansion echo 当前正在运行的批处理文件所在路径:!cd ...
- c# 获取路径的盘符_c#获取驱动器盘符
在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数 ...
- u盘固定盘符_浅析固定U盘盘符的原理
研究固定U盘盘符从哪里开始?从注册表来研究是最好的.为什么要从注册表来研究磁盘与盘符?很简单,操作注册表速度最快,这不同于使用工具软件从低层进行查询,其实PECMD的SHOW命令就是低层操作,操作复杂 ...
- bat命令 获取当前盘符 路径 写环境变量
批处理命令获取当前盘符和当前目录 当前盘符:%~d0 当前路径:%cd% 当前执行命令行:%0 当前bat文件路径:%~dp0 当前bat文件短路径:%~sdp0 其他命令 echo 打印字符串 se ...
- U盘问题,插入时只有声音,没有显示,在”计算机管理”的“磁盘管理”中,上面看不到盘符”H:”,下面可以看到”磁盘1 可移动无媒
问题:U盘问题,插入时只有声音,没有显示,在"计算机管理"的"磁盘管理"中,上面看不到盘符"H:",下面可以看到"磁盘1 可移动无 ...
最新文章
- 小程序判断数组的index是否为空_微信小程序之购物车功能(仅学习)
- 09、redis哨兵的多个核心底层原理的深入解析(包含slave选举算法)
- TableAdapter 概述
- 搜索打表大找规律 (hdu2045)
- 11.05 scrum report
- java Mina sftp_java – 使用Apache Mina作为模拟/内存SFTP服务器进行单元测试
- linux之lsusb命令和cd -命令使用总结
- mybatis学习(16):不使用接口的方式
- donotage标记、MTU及MTU不匹配问题、OSPF邻居状态记录
- linux系统制作win安装盘,在Ubuntu Linux下制作Windows 启动安装 USB盘
- 获取Repeater中Footer/HeaderTemplate 中的控件
- 学习.net设计规范记录
- 达观数据:Tornado原理浅析及应用场景探讨
- Linux命令——parted
- Ajaxfileupload上传多张图片
- Dancing Line、网易蜗牛读书——创新性分析
- 观点| 如何避免GitHub那样断网43秒瘫痪 24 个小时?
- log日志输出到文件:
- 数量金融学(7):连续复利
- 魏小亮:如何选择硅谷的IT公司
热门文章
- 流行的权限管理 gem devise的定制
- 【2021-12-22】【Kotlin】Type inference failed. Expected type mismatch: inferred type is HashSet but Set
- A4纸张两面打印、每面打印2页的打印机设置
- 互联网运营面试题_产品运营面试常见问题
- 微信公众号的类型和功能
- Fabric-ca与现有fabric网络组织绑定
- matlab课表编排程序实例,编排课程表的一点心得
- 使用JiaoZiVideoPlayer播放视频方向横过来出现的问题
- 【Android -- 面试】简历模板
- netty权威指南笔记-以回车换行结尾的消息如何处理半包问题