python獲取指定名字的程序的文件路徑的兩種方法
最近在做項(xiàng)目,需要用到給定一個程序名字就可以自動獲取到這個程序在windows系統(tǒng)下的絕對路徑,以下是我的兩個思路:
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)存放每個磁盤下的所有文件夾列表 os.listdir返回值為list
dirs=[os.listdir(disk) for disk in disks]
#使用zip方法將磁盤與其下的所有文件夾列表構(gòu)成鍵值對
#形如:{'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())這樣查找起來目標(biāo)應(yīng)用程序的路徑十分耗時,特別是當(dāng)你的磁盤內(nèi)的一些文件夾的嵌套深度特別大的時候(windows系統(tǒng)下文件夾最大嵌套深度為83)
2.先啟動要運(yùn)行的程序,然后通過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):
'''該方法通過遍歷當(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'微信未啟動,請啟動后再調(diào)用此函數(shù)!')相較于第一種方法,第二種方法更加省時省力
到此這篇關(guān)于python獲取指定名字的程序的文件路徑的兩種方法的文章就介紹到這了,更多相關(guān)python獲取指定名字文件路徑內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Tensorflow讀取MNIST數(shù)據(jù)集時網(wǎng)絡(luò)超時的解決方式
這篇文章主要介紹了基于Tensorflow讀取MNIST數(shù)據(jù)集時網(wǎng)絡(luò)超時的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
python矩陣運(yùn)算,轉(zhuǎn)置,逆運(yùn)算,共軛矩陣實(shí)例
這篇文章主要介紹了python矩陣運(yùn)算,轉(zhuǎn)置,逆運(yùn)算,共軛矩陣實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python中的json對象與string相互轉(zhuǎn)換教程
python里有json這個庫,但并沒有json這個類,所以所謂的json對象本質(zhì)上就是一個dict;而json這個庫,用于實(shí)現(xiàn)dict到string、string到dict的互轉(zhuǎn),這篇文章主要介紹了Python中的json對象與string相互轉(zhuǎn)換教程,需要的朋友可以參考下2022-11-11
Python?OpenCV超詳細(xì)講解調(diào)整大小與圖像操作的實(shí)現(xiàn)
OpenCV用C++語言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實(shí)時視覺應(yīng)用,并在可用時利用MMX和SSE指令,本篇文章帶你通過OpenCV實(shí)現(xiàn)重調(diào)大小與圖像裁剪2022-04-04
python 列表,數(shù)組,矩陣兩兩轉(zhuǎn)換tolist()的實(shí)例
下面小編就為大家分享一篇python 列表,數(shù)組,矩陣兩兩轉(zhuǎn)換tolist()的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

