美文网首页
Python3 - 用Shell通配符匹配字符串

Python3 - 用Shell通配符匹配字符串

作者: 惑也 | 来源:发表于2018-12-18 17:23 被阅读15次

问题

使用 Unix Shell 中常用的通配符(比如 .py , Dat[0-9].csv 等)去匹配文本字符串

解决方案

fnmatch 模块提供了两个函数—— fnmatch()fnmatchcase(),可以实现这样的匹配。用法如下:

from fnmatch import fnmatch, fnmatchcase

print(fnmatch('foo.txt', '*.txt'))
print(fnmatch('foo.txt', '?oo.txt'))
print(fnmatch('Dat45.csv', 'Dat[0-9]*'))
True
True
True

names = ['Dat1.csv', 'Dat2.csv', 'config.ini', 'foo.py']
fn = [name for name in names if fnmatch(name, 'Dat*.csv')]
print(fn)
['Dat1.csv', 'Dat2.csv']

fnmatch() 函数使用底层操作系统的大小写敏感规则进行匹配,不同的操作系统不一样。比如:

# On OS X (Mac)
fnmatch('foo.txt', '*.TXT')    # returen False

# On Windows
fnmatch('foo.txt', '*.TXT')    # return True

如果对大小写匹配的区别很在意,可以使用 fnmatchcase() 来代替,该函数完全按区别大小写匹配。比如:

print(fnmatchcase('foo.txt', '*.TXT'))
False

讨论

fnmatch() 函数匹配能力介于简单的字符串方法和强大的正则表达式之间。 如果在数据处理操作中只需要简单的通配符就能完成的时候,这通常是一个比较合理的方案。

如果代码需要做文件名的匹配,最好使用 glob 模块。

相关文章

网友评论

      本文标题:Python3 - 用Shell通配符匹配字符串

      本文链接:https://www.haomeiwen.com/subject/fxylkqtx.html