2012-09-13 34 views
4

我有一些代碼,我想知道一個路徑是否具有shell通配符,這似乎是在中心位置定義的東西。我發現glob.has_magic()提供了這個(它只是一個正則表達式:'[*?[]')。但是此方法未列在模塊的__all__列表中,並且未出現在pydoc中。可以使用glob.has_magic嗎?

我應該只是複製這個正則表達式到我的代碼? (我不喜歡)

在未來版本的python中是否存在這種方法被刪除的風險,因爲它沒有出現在文檔中?

+0

作爲一個小方面:'has_magic'不檢查shell通配符,而是檢查特殊的glob字符。這不完全是一回事。括號範圍不是通配符,你的特定shell可以實現一個子集(Windows cmd.exe)或glob的超集(bash或zsh)等等。但是我猜你實際上使用正則表達式來表示「glob special字符「而不是」當前用戶shell的通配符「,在這種情況下,您可以忽略這種挑剔。 – abarnert

+0

@abarnert:是的,我想「glob特殊字符」會更具體。 – Chris

回答

2

就我個人而言,我會複製正則表達式。它不像glob模式的定義會改變,迫使你在你的代碼中改變它。 stdlib不能從外部獲得該方法這一事實意味着沒有承諾它將來不會改變。我不擔心它在將來會發生變化(出於與上述相同的原因:glob模式的定義不會改變),但是我擔心如果模塊的實現被重構,它可能被刪除不再需要。

+1

請注意,也不能保證它在不同的python實現中(例如'jython'或'pypy')。雖然,因爲它在純Python模塊中,所以也不太可能。 – mgilson

+0

好點,@ mgilson – Celada