python獲取指定名字的程序的文件路徑的兩種方法
最近在做項(xiàng)目,需要用到給定一個(gè)程序名字就可以自動(dòng)獲取到這個(gè)程序在windows系統(tǒng)下的絕對(duì)路徑,以下是我的兩個(gè)思路:
1.使用os直接遍歷所有磁盤下的所有文件夾,直到找到為止
import os #示例代碼以尋找微信的WeChat.exe路徑為例,其結(jié)構(gòu)為: def find_wechat_path_in_windows(): wechat_path=None #獲得所有磁盤分區(qū) disk_partitions=psutil.disk_partitions(all=True) disks=[disk.mountpoint for disk in disk_partitions] #dirs內(nèi)存放每個(gè)磁盤下的所有文件夾列表 os.listdir返回值為list dirs=[os.listdir(disk) for disk in disks] #使用zip方法將磁盤與其下的所有文件夾列表構(gòu)成鍵值對(duì) #形如:{'C':['programfiles','User','programfiles(X86)'],'D':['Games','python312']} Paths=dict(zip(disks,dirs)) #遍歷磁盤下的所有文件夾 for disk in Paths: if 'WeChat' in Paths.get(disk): wechat_path=os.path.join(disk,'WeChat','WeChat.exe') break elif 'Tencent' in Paths.get(disk): wechat_path=os.path.join(disk,'Tencent','WeChat','WeChat.exe') break else: folders=[dirname for dirname in Paths.get(disk) if os.path.isdir(os.path.join(disk,dirname))] for folder in folders: root_dir=os.path.join(disk,folder) for dirpath,dirnames,filenames in os.walk(root_dir): if 'WeChat.exe' in filenames: wechat_path=os.path.join(dirpath,'WeChat.exe') break return wechat_path print(find_wechat_path_in_windows())
這樣查找起來(lái)目標(biāo)應(yīng)用程序的路徑十分耗時(shí),特別是當(dāng)你的磁盤內(nèi)的一些文件夾的嵌套深度特別大的時(shí)候(windows系統(tǒng)下文件夾最大嵌套深度為83)
2.先啟動(dòng)要運(yùn)行的程序,然后通過(guò)psutil.process_itar遍歷進(jìn)程池,并比較要查找的微信exe文件與進(jìn)程池中所有進(jìn)程名稱若名稱一致則結(jié)束循環(huán),在這里我們主要用到process_itar返回值中的name與exe屬性,其中name為當(dāng)前正在執(zhí)行的進(jìn)程的名稱,exe為當(dāng)前正在執(zhí)行進(jìn)程的文件路徑
import win32clipboard import psutil def find_wechat_path_in_windows(copy_to_clipboard:bool=True): '''該方法通過(guò)遍歷當(dāng)前系統(tǒng)下所有進(jìn)程查找正在運(yùn)行的微信的路徑,你可以將Wechat.exe替換為你需 要的應(yīng)用 ''' for process in psutil.process_iter(['name','exe']): if 'WeChat.exe' in process.info['name']: wechat_path=process.info['exe'] break if wechat_path: if copy_to_clipboard: win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardText(wechat_path) win32clipboard.CloseClipboard() print("已將微信程序路徑復(fù)制到剪貼板") return wechat_path else: print(f'微信未啟動(dòng),請(qǐng)啟動(dòng)后再調(diào)用此函數(shù)!')
相較于第一種方法,第二種方法更加省時(shí)省力
到此這篇關(guān)于python獲取指定名字的程序的文件路徑的兩種方法的文章就介紹到這了,更多相關(guān)python獲取指定名字文件路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Tensorflow讀取MNIST數(shù)據(jù)集時(shí)網(wǎng)絡(luò)超時(shí)的解決方式
這篇文章主要介紹了基于Tensorflow讀取MNIST數(shù)據(jù)集時(shí)網(wǎng)絡(luò)超時(shí)的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06python矩陣運(yùn)算,轉(zhuǎn)置,逆運(yùn)算,共軛矩陣實(shí)例
這篇文章主要介紹了python矩陣運(yùn)算,轉(zhuǎn)置,逆運(yùn)算,共軛矩陣實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Python中的json對(duì)象與string相互轉(zhuǎn)換教程
python里有json這個(gè)庫(kù),但并沒(méi)有json這個(gè)類,所以所謂的json對(duì)象本質(zhì)上就是一個(gè)dict;而json這個(gè)庫(kù),用于實(shí)現(xiàn)dict到string、string到dict的互轉(zhuǎn),這篇文章主要介紹了Python中的json對(duì)象與string相互轉(zhuǎn)換教程,需要的朋友可以參考下2022-11-11用python爬取今日說(shuō)法每期數(shù)據(jù)
大家好,本篇文章主要講的是用python爬取今日說(shuō)法每期數(shù)據(jù),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02Python?OpenCV超詳細(xì)講解調(diào)整大小與圖像操作的實(shí)現(xiàn)
OpenCV用C++語(yǔ)言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實(shí)時(shí)視覺(jué)應(yīng)用,并在可用時(shí)利用MMX和SSE指令,本篇文章帶你通過(guò)OpenCV實(shí)現(xiàn)重調(diào)大小與圖像裁剪2022-04-04python 列表,數(shù)組,矩陣兩兩轉(zhuǎn)換tolist()的實(shí)例
下面小編就為大家分享一篇python 列表,數(shù)組,矩陣兩兩轉(zhuǎn)換tolist()的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04