2013-01-14 56 views
1

我正在製作一個搜索腳本來解析歸檔中的日誌文件,並且卡住了我沒有在其他任何地方找到資源的特定事件。Python中,如何替換「任何」或「*」的路徑的一個級別

我需要以某種方式替換這個字符串的「id1」爲「任何東西」。簡而言之,我希望腳本在路徑中的特定位置採取任何操作。這可能只有通過使用logZip作爲一個巨大的正則表達式?

logZip = ("c:/logs/" + str(id1) + "/" + str(id2) + "/" + str(id1) + "_log_" + str(dateID) + "_" + str(hourID) + "-00_" + str(id2) + ".zip") 

按照要求,進出口增加一個樣本路徑和文件,我想定義:

c:/logs/aaa1/sss2/aaa1_log_2013-01-14-13-00_sss2.zip 
c:/logs/aaa2/sss2/aaa2_log_2013-01-14-13-00_sss2.zip 
c:/logs/aaa3/sss2/aaa3_log_2013-01-14-13-00_sss2.zip 

下一步將是使與SSS2部分同樣的事情。

+0

問題似乎很清楚..你可以粘貼樣本路徑或東西的問題。 – Suku

+0

'os'包中的'listdir'是否工作?我的意思是你可以列出'logs'中的所有子目錄,並通過迭代子目錄名稱來手動構建你的路徑。 –

回答

3
import glob 
import os 

id1 = '*' 
logZip = glob.glob(os.path.join("c:/logs", id1, id2, '{}_log_{}_{}-00_{}.zip'.format(id1, dateID, hourID, id2))) 

返回那裏id1通過通配符*代替完整路徑文件列表。

os.path.join使路徑結構更清晰。

如果logZip必須是一個單一的文件,你可以使用glob.iglob,它返回一個迭代器:

id1 = '*' 
mask = os.path.join("c:/logs", id1, id2, '{}_log_{}_{}-00_{}.zip'.format(id1, dateID, hourID, id2)) 
for logZip in glob.iglob(mask): 
    # logZip is a single file 
+0

'os.path.join'和'format'。 +1 – Matthias

+0

這實際上非常棒,非常感謝你:)現在我只需要以某種方式告訴zipFile模塊遍歷代碼生成的列表。因爲默認情況下,據我所知,zipFile無法打開列表中的文件,但只能打開一個定義的文件。無論如何,這是我將在稍後嘗試處理的另一個問題。再次感謝。 – panta

+0

@panta - 請參閱我編輯的迭代答案... – eumiro

相關問題