- Python進階編程:編寫更高效、優雅的Python代碼
- 劉宇宙 謝東 劉艷
- 383字
- 2021-04-30 12:39:39
2.3.2 用Shell通配符匹配字符串
我們可以使用Unix Shell中常用的通配符(如*.py,*.xml等)進行字符串的匹配。
fnmatch模塊提供了兩個函數——fnmatch()和fnmatchcase(),以便實現字符串的匹配,示例如下:
from fnmatch import fnmatch, fnmatchcase print(fnmatch('python.txt', '*.txt')) print(fnmatch('hello.txt', '?ello.txt')) print(fnmatch('course_15.csv', 'course_[0-9]*')) names = ['Date_1.csv', 'Date_2.csv', 'config.ini', 'test.py'] print([name for name in names if fnmatch(name, 'Dat*.csv')])
fnmatch()函數使用底層操作系統的大小寫敏感規則(不同的系統是不一樣的)來匹配模式。一般,Windows操作系統對于大小寫是不敏感的,Linux或Mac系統對于大小寫是敏感的,大家可以分別進行驗證。
如果確實需要區分大小寫,可以使用fnmatchcase()函數來代替fnmatch()函數。它完全是大小寫匹配的,示例如下:
print(fnmatchcase('python.txt', '*.TXT'))
fnmatch()和fnmatchcase()函數在處理非法字符串時也是很有用的。對于如下列表數據(shell_match_exp.py):
doing_thing = [ 'reading a book', 'watching tv', 'running in the park', 'eating food', 'writing book', ]
可以寫成如下的列表推導(shell_match_exp.py):
from fnmatch import fnmatchcase print([doing for doing in doing_thing if fnmatchcase(doing, '* book')]) print([doing for doing in doing_thing if fnmatchcase(doing, '[a-z][a-z]*ing *oo*')])
fnmatch()函數匹配能力介于簡單的字符串方法和強大的正則表達式之間。如果在數據處理操作中只需要簡單的通配符就能完成,使用fnmatch()函數通常是一個比較合理的方案。
推薦閱讀
- 零起步玩轉掌控板與Mind+
- Oracle從新手到高手
- Machine Learning with R Cookbook(Second Edition)
- Java加密與解密的藝術(第2版)
- 精通搜索分析
- 重學Java設計模式
- Visual C++應用開發
- 實戰Java高并發程序設計(第3版)
- 西門子S7-200 SMART PLC編程從入門到實踐
- Building Wireless Sensor Networks Using Arduino
- Windows Embedded CE 6.0程序設計實戰
- Mastering Docker
- Mastering Unreal Engine 4.X
- 例解Python:Python編程快速入門踐行指南
- HTML5 WebSocket權威指南