glob排除模式
回答
您不能用glob
函數排除圖案,globs只允許包含圖案。 Globbing syntax是非常有限的(即使[!..]
字符類必須匹配一個字符,所以它是一個包含模式對於不在該類中的每個字符)。
你必須做你自己的過濾;列表理解通常在這裏很好地工作:
files = [fn for fn in glob('somepath/*.txt')
if not os.path.basename(fn).startswith('eph')]
可以扣除集:
set(glob("*")) - set(glob("eph"))
非常有趣的解決方案!但是我的情況會非常緩慢地讀兩次。另外,如果網絡目錄中文件夾的內容很大,則會再次變慢。但無論如何,真的很方便。 –
你的操作系統應該緩存文件系統請求,所以沒有那麼糟糕:) – neutrinus
嘗試這個我自己,我剛剛得到TypeError:不支持的操作數類型爲 - :'list'和'list' –
更一般地,以排除不符合一些正則表達式外殼文件,你可以使用模塊fnmatch
:
import fnmatch
file_list = glob('somepath')
for ind, ii in enumerate(file_list):
if not fnmatch.fnmatch(ii, 'bash_regexp_with_exclude'):
file_list.pop(ind)
以上將首先從給定路徑生成列表,然後彈出不滿足具有所需約束的正則表達式的文件。
太遲了,但你可以只交替應用蟒蛇filter
到glob
結果:
files = glob.iglob('your_path_here')
files_i_care_about = filter(lambda x: not x.startswith("eph"), files)
或用適當的正則表達式搜索替換拉姆達,等等
編輯:我剛剛意識到,如果你使用的完整路徑的startswith
將無法正常工作,所以你需要一個正則表達式
In [10]: a
Out[10]: ['/some/path/foo', 'some/path/bar', 'some/path/eph_thing']
In [11]: filter(lambda x: not re.search('/eph', x), a)
Out[11]: ['/some/path/foo', 'some/path/bar']
正如接受的答案所述,您不能使用glob排除模式,因此以下是過濾glob結果的方法。
接受的答案可能是最好的pythonic方式來做事情,但如果你認爲列表解析看起來有點醜陋,並且想要使你的代碼最大化numpythonic無論如何(就像我做的那樣),那麼你可以做到這一點(但請注意,這可能比列表解析方法效率較低):
import glob
data_files = glob.glob("path_to_files/*.fits")
light_files = np.setdiff1d(data_files, glob.glob("*BIAS*"))
light_files = np.setdiff1d(light_files, glob.glob("*FLAT*"))
(在我的情況,我有一些圖像幀,偏置框架和平面框架都在同一個目錄中,我只是想將圖像幀)
glob的模式規則不是正則表達式。相反,他們遵循標準的Unix路徑擴展規則。只有幾個特殊字符:兩個不同的通配符,並支持字符範圍[來自glob]。
所以你可以排除一些帶有模式的文件。
例如,要排除清單文件(文件開始_
)與水珠,你可以使用:
files = glob.glob('files_path/[!_]*')
這必須在官方文檔中,請有人將此添加到https://docs.python.org/3.5/library/glob.html#glob.glob –
是的,這是做了排除某些文件擴展名的技巧。謝謝! –
- 1. glob模式
- 2. 使用glob排除某些文件的負模式匹配
- 3. 排除從長期緩存sw.js與glob模式匹配
- 4. 如何從cmake文件(GLOB ...)模式中排除單個文件?
- 5. 與Glob排除文件
- 6. Gulp排除glob語法
- 7. 找到glob模式
- 8. 幫助,glob模式
- 9. python glob匹配模式
- 10. PHP glob模式問題
- 11. Ruby glob:排除目錄和文件
- 12. Node.js glob包含/排除文件
- 13. grunt(minimatch/glob)文件夾排除
- 14. 從ignore-glob中排除某些目錄
- 15. 與排除模式
- 16. Robots.txt排除模式
- 17. siteMesh + Spring 3.0 +排除模式
- 18. CMAKE aux_source_directory排除模式
- 19. 排除某些模式?
- 20. maven pom.xml排除模式$
- 21. 排除RegEx中的模式
- 22. validates_format_of排除某些模式
- 23. glob模式 - 完整的目錄除了子文件夾
- 24. 是否字符串匹配glob模式
- 25. 在glob()PHP中使用兩種模式?
- 26. 逃逸在glob模式字符GIT中
- 27. TypeError:gulp需要的glob模式字符串
- 28. glob() - 按名稱排序
- 29. glob() - 按日期排序
- 30. 在模式匹配時排除其他模式中的模式
使用''這裏iglob''以避免在內存中存儲 –
@Hardex的完整列表:在內部,'iglob '生產清單*無論如何*;你所做的只是懶惰地評估過濾器。這無助於減少內存佔用。 –
@Hardex:如果你在*目錄名中使用glob,那麼你會得到一個點,那麼在迭代時,最多隻有一個'os.listdir()'結果保存在內存中。但'somepath/*。txt'必須讀取內存中的一個目錄中的所有文件名,然後將該列表減少爲僅匹配的目錄。 –