03掃瞄模組搜尋路徑

2022-09-04 00:12:18 字數 1543 閱讀 7779

import

sys,os,pprint

trace=0 #

1代表目錄 ,2代表加上檔案

visited={}

allsizes=

for srcdir in

sys.path:

for (thisdir,subshere,fileshere) in

os.walk(srcdir):

if trace>0:print

(thisdir)

thisdir=os.path.normpath(thisdir)

fixcase=os.path.normcase(thisdir)

if fixcase in

visited:

continue

else

: visited[fixcase]=true

for filename in

fileshere:

if filename.endswith('

.py'

):

if trace>1:print('

...'

,filename)

pypath=os.path.join(thisdir,filename)

try:

pysize=os.path.getsize(pypath)

except

os.error:

print('

skipping

',pypath,sys.exc_info())

else

: pylines=len(open(pypath,'rb'

).readlines())

print('

by size...')

allsizes.sort()

pprint.pprint(allsizes[:3])

pprint.pprint(allsizes[-3:])

print('

by lines...')

allsizes.sort(key=lambda x:x[1])

pprint.pprint(allsizes[:3])

pprint.pprint(allsizes[-3:])

執行的時候,這個指令碼遍歷模組匯入路徑及其下所有有效的目錄,試圖對這棵樹進行整體搜尋。事實上,它包含了三層巢狀迴圈,分別針對路徑下的每一項,該項的每個目錄,以及該目錄下的每個檔案。因為模組路徑可能包括隨意命名的目錄,所以在搜尋過程中指令碼必須注意:

統一目錄路徑格式。解決斜槓和句點的問題,將目錄統一成一種風格。

統一目錄名大小寫。在對大小寫不敏感的windows系統下轉化成小寫

檢測重複情況以避免同乙個目錄訪問兩次(同一目錄可能通過多條路徑從sys.path鏈結到)

在二進位制模式下開啟檔案以獲取行數,可以避免檔案內中潛在的unicode解碼錯誤。

這個版本的腳步還新增了行計數器,這一點也可能延長腳步執行的時間,不過報告這個數字是個有用的功能。  

python 模組搜尋路徑

當你匯入乙個模組,python 解析器對模組位置的搜尋順序是 1 當前目錄 2 如果不在當前目錄,python 則搜尋在 shell 變數 pythonpath 下的每個目錄。3 如果都找不到,python會檢視預設路徑。unix下,預設路徑一般為 usr local lib python 模組搜尋...

Python模組搜尋路徑

最近一直被python包匯入絆倒,所以打算好好學習一下python包模組搜尋路徑 外部的terminal中執行,不是ide中 import的時候,python interpreter首先搜尋built in module中有沒有叫這個名的 比如os模組,用 builtins 檢視 若是沒有才會到sy...

Python 模組搜尋路徑

我們都知道,使用python時,無論是使用第三方的模組 庫 還是自己開發的模組,都需要先在 中使用import來引入。對於初學者,經常會遇到的乙個問題是在使用import時,python 找不到相應的模組,於是編譯器報 importerror錯誤。那麼,python 如何知道在 搜尋模組的路徑呢?當...