官术网_书友最值得收藏!

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()函數通常是一個比較合理的方案。

主站蜘蛛池模板: 枣庄市| 朝阳县| 镇远县| 玉溪市| 剑河县| 永年县| 淅川县| 开江县| 两当县| 五寨县| 牙克石市| 岳阳市| 桑植县| 英德市| 宜宾市| 洛阳市| 镇原县| 凌云县| 沅江市| 肃宁县| 石嘴山市| 金昌市| 长寿区| 嵊泗县| 乳源| 绍兴县| 改则县| 宁海县| 若尔盖县| 资溪县| 海晏县| 类乌齐县| 商水县| 庆城县| 根河市| 六盘水市| 开封市| 红河县| 苏尼特左旗| 伽师县| 忻州市|