如何移除DataFrame中文件名的父目录路径?
问题分析
你遇到的核心问题是字符串中反斜杠的转义处理错误,以及引号使用不当导致的语法报错。另外方法4的思路绕了弯路,没有直接定位到要移除的完整前缀。
正确解决方案
下面是几种直接有效的方法,按推荐程度排序:
1. 用os.path.basename提取文件名(最稳妥通用)
这个方法不需要关心具体前缀格式,直接从路径中提取最终的文件名,适配各种路径类型:
import os df["filename"] = df["filename"].apply(os.path.basename)
比如输入".\XML files\ABC123.xml",直接输出"ABC123.xml"。
2. 正确转义后使用str.replace
要匹配".\XML files\"这个前缀,需要把字符串中的反斜杠转义(写成\\),或者使用原始字符串(在字符串前加r,避免转义):
# 方式A:原始字符串 df["filename"] = df["filename"].str.replace(r".\XML files\", "", regex=False) # 方式B:转义反斜杠 df["filename"] = df["filename"].str.replace(".\\XML files\\", "", regex=False)
注意要关闭regex(设为False),避免字符串中的特殊字符被当作正则表达式解析。
3. 用str.split分割路径
按反斜杠分割路径后取最后一段:
# 转义反斜杠 df["filename"] = df["filename"].str.split("\\").str[-1] # 或者用原始字符串 df["filename"] = df["filename"].str.split(r"\\").str[-1]
你之前方法的问题说明
- 方法1-3:字符串中的
\未转义,而且引号配对错误,导致Python解析字符串时报错。比如".\XML files\"里的最后一个\会转义后面的双引号,导致字符串未闭合,触发EOL while scanning string literal错误。 - 方法4:只替换了"XML files",剩下的
.\\需要额外处理,但直接替换\\后还剩开头的.,如果要补救可以用df["filename"] = df["filename"].str.replace(".\\", "", regex=False),但不如前面的方法直接。
内容的提问来源于stack exchange,提问作者H B
相关产品推荐
相关产品推荐

