You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame中精准匹配不含扩展名的目标文件名?

解决方案:精确匹配不带扩展名的文件名

你的问题在于str.contains()是包含匹配,只要字符串里有目标子串就会被选中,所以才会误匹配到xyz123.pdf这类文件名。下面是几种可靠的精确匹配方法:

方法1:提取文件名主体后精确匹配

最直观的方式是先从文件名中剥离扩展名,再和目标文件名做精确相等判断。考虑到文件名可能包含多个点(比如report.v2.pdf),我们用rsplit('.', 1)从最后一个点拆分,确保拿到完整的文件名主体:

import pandas as pd

# 示例数据
df = pd.DataFrame({'A': ['xyz.pdf', 'xyz123.pdf', 'abc.xyz.pdf', 'xyz.txt']})
fileName = 'xyz'

# 提取最后一个点之前的部分,然后精确匹配
result = df[df['A'].str.rsplit('.', 1).str[0] == fileName]
print(result)

输出结果会只包含xyz.pdf和xyz.txt,完美避开xyz123.pdf和abc.xyz.pdf。

方法2:用正则表达式做完整匹配

如果需要更灵活的匹配逻辑(比如文件名包含特殊字符),可以用正则表达式确保开头就是目标文件名,紧接着是扩展名的分隔点:

import re

# 用re.escape处理文件名中的特殊字符(比如如果fileName是"abc.def")
pattern = re.compile(f'^{re.escape(fileName)}\\.')
result = df[df['A'].str.match(pattern, na=False)]

这里^表示字符串开头,\\.匹配实际的点(正则中点是通配符,需要转义),re.escape()能自动处理文件名里的正则特殊字符,避免匹配出错。

方法3:用fullmatch匹配完整字符串

如果你想强制匹配整个文件名格式为「目标名.扩展名」,可以用str.fullmatch(),它要求整个字符串完全符合正则模式:

result = df[df['A'].str.fullmatch(f'{fileName}\\..+')]

..+表示点后面至少有一个字符(确保有扩展名),这样连不带扩展名的xyz也会被排除(如果你的列里有这类数据的话)。

内容的提问来源于stack exchange,提问作者dmornad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:21:05