Python 通配符
在 Python 编程中,通配符是一种非常常见的概念。通过通配符,我们可以灵活地匹配字符串,对比和搜索操作变得非常便捷。Python 中有多种方式可以使用通配符,本文将介绍常用的通配符方法和示例代码。
fnmatch 模块
Python 的 fnmatch
模块提供了 fnmatch()
和 fnmatchcase()
两个函数,用于模式匹配文件名。这两个函数使用 Unix shell 风格的语法进行匹配,可以用 *
匹配任意字符,?
匹配一个字符。
fnmatch()
import fnmatch
pattern = 'file*.txt'
tests = ['file1.txt', 'file2.txt', 'document.txt']
for test in tests:
if fnmatch.fnmatch(test, pattern):
print(test)
运行结果:
file1.txt
file2.txt
fnmatchcase()
fnmatchcase() 和 fnmatch() 类似,但是区分大小写。下面的示例将只匹配大写的文件名。
import fnmatch
pattern = 'FILE*.txt'
tests = ['file1.txt', 'FILE2.txt', 'document.txt']
for test in tests:
if fnmatch.fnmatchcase(test, pattern):
print(test)
运行结果:
FILE2.txt
glob 模块
glob
模块提供了用于文件通配的功能,可以使用通配符来匹配文件路径。与 fnmatch
模块不同的是,glob
模块返回的是匹配的文件路径列表。
import glob
files = glob.glob('*.txt')
for file in files:
print(file)
运行结果:
file1.txt
file2.txt
document.txt
re 模块
Python 中的 re
模块提供了正则表达式功能,可以使用正则表达式来匹配字符串。正则表达式是一种强大的匹配工具,可以灵活地匹配各种复杂的字符串格式。
re.match()
re.match()
方法从字符串的起始位置开始匹配,如果匹配成功返回一个匹配的对象,否则返回 None
。
import re
pattern = 'geek.*com'
tests = ['geek-docs.com', 'geek-forum.com', 'geekblog.com']
for test in tests:
if re.match(pattern, test):
print(test)
运行结果:
geek-docs.com
re.search()
re.search()
方法扫描整个字符串并返回第一个成功的匹配对象。下面示例用正则表达式匹配包含 geek
的字符串。
import re
pattern = 'geek'
tests = ['geek-docs.com', 'geek-forum.com', 'geekblog.com']
for test in tests:
if re.search(pattern, test):
print(test)
运行结果:
geek-docs.com
geek-forum.com
geekblog.com
re.findall()
re.findall()
方法返回字符串中所有与正则表达式匹配的字符串,以列表形式返回。下面示例匹配字符串中的数字。
import re
pattern = '\d+'
test = 'geek-docs.com has 1000 visitors per day'
print(re.findall(pattern, test))
运行结果:
['1000']
总结
本文介绍了 Python 中通配符的使用方法,包括 fnmatch
模块、glob
模块和 re
模块。通过这些库,我们可以方便地进行文件名的匹配和字符串的搜索操作。