我做了原子建模,並使用Python來分析仿真結果。爲了簡化用於不同任務的大量Python腳本的工作,我決定編寫簡單的GUI來從中運行腳本。WxPython - 基於文件可用性構建目錄樹
我有一個(相當複雜的)目錄結構從一些根(比如~/calc
)開始,我想用包含保存其結構的計算結果的目錄填充wx.TreeCtrl
控件。如果文件夾包含擴展名爲.EXT
的文件,則該文件夾包含結果。我試圖做的是從根目錄和每個目錄中檢查是否包含.EXT
文件。當達到這樣的目錄,它和它的祖先樹添加:
def buildTree(self, rootdir):
root = rootdir
r = len(rootdir.split('/'))
ids = {root : self.CalcTree.AddRoot(root)}
for (dirpath, dirnames, filenames) in os.walk(root):
for dirname in dirnames:
fullpath = os.path.join(dirpath, dirname)
if sum([s.find('.EXT') for s in filenames]) > -1 * len(filenames):
ancdirs = fullpath.split('/')[r:]
ad = rootdir
for ancdir in ancdirs:
d = os.path.join(ad, ancdir)
ids[d] = self.CalcTree.AppendItem(ids[ad], ancdir)
ad = d
但這個代碼最終與具有相同名稱的許多二級節點,這絕對不是我想要的。所以我需要查看節點是否已經添加到樹中,並且在正面情況下爲現有節點添加新節點,但我不明白這是如何實現的。你能給我一個提示嗎?
此外,該代碼包含2級骯髒的黑客我想擺脫:
我得到祖先迪爾斯名單與分裂的
\
位置的完整路徑,這是Linux的具體;我覺得如果
.EXT
文件所在的目錄,試圖從filenames
列表中找到字符串中的延伸,同時在帳戶s.find
返回-1
如果子沒有找到。
有沒有辦法讓這些代碼塊更具可讀性?
非常感謝,你的代碼肯定更具可讀性。至於填充樹,我考慮了遞歸,但我沒有看到在這個問題中使用它的方式,因爲我知道我是否需要第一級目錄只是一直貫穿它。但昨晚我在代碼中發現錯誤,所以現在它按預期工作。 – 2011-12-15 05:53:09