2012-10-18 41 views
1

我對Python很新,但我在C#中有很多經驗。我喜歡的東西之一就是你用Linq-Framework獲得的一套工具。 因此,我在Python中尋找一些等價物,因爲它似乎有一些嘗試。除了pynq,我剛剛沒有工作,似乎已經死了,我發現itertools有一些選項可以進入這個方向。 但我仍然有問題才能使其工作。 我想要的是不是目錄中的條目列表。 是的,我相信還有很多其他更好的方法可以做到這一點,但我想用itertools來解決這個問題,因爲類似的問題也可能出現在其他地方。python itertools lambda /最好的python類似於LINQ的方法

import os, itertools 

listing = os.listdir(".") 
filteredfiles = itertools.ifilterfalse(lambda dirContent: os.path.isdir(dirContent), listing) 
for f in filteredfiles: 
    print "found file: " + f 

這給了我一個目錄完整內容的輸出。 如果我用ifilter替換ifilterfalse,我會得到一個空列表。

我只是可以猜測它只是沒有與os.path.isdir(...)複雜的調用,但我不知道。

任何人都可以給我一個答案嗎?基本上,正如我上面所說,我只是想要一些類似Linq的可能性來過濾Iterables。我不喜歡循環。他們讓我頭暈目眩。 ;-)

+1

您當前的代碼工作對我很好,用'ifilterfalse'它只顯示文件,以'ifilter'它只是顯示目錄。 –

+2

我也不喜歡循環,但請注意Python對於某些常見操作比函數調用+ lambda有更方便的語法。請參閱[Python的列表理解與.NET LINQ](http://stackoverflow.com/q/3925093/395760)。而且,只是傳遞參數的lambda表達式是多餘的:'filter(os.path.isdir,listing)'起作用並且是優越的。 – delnan

+0

@ F.J有趣...你有可能使用Windows?請看下面的Iliyan的回答。 – gelse

回答

1

你需要檢查之前創建的全路徑名:

os.path.isdir(os.path.join(path, dirContent)) 
+0

Oi!謝謝,就是這樣。奇怪,我怎麼錯過了... – gelse