在Pandas中按需解析文件路径:保留首尾指定层级目录与完整文件名
在Pandas中按需解析文件路径:保留首尾指定层级目录与完整文件名
看来你想要的是一种更灵活的路径格式化方式——既能保留开头的关键层级目录,又能展示末尾的目录结构和完整文件名,中间用省略号过渡对吧?我给你两个实用的方案,你可以根据需求选择:
方案一:自定义函数处理(推荐,灵活易调整)
这种方式通过拆分路径、筛选需要保留的部分再重组,逻辑清晰,还能轻松调整要保留的首尾层级数量:
def format_file_path(path, keep_first=4, keep_last=3): # 拆分路径为各个层级,同时过滤掉空字符串(因为路径开头的/会生成空元素) path_parts = [part for part in path.strip().split('/') if part] # 如果路径总长度小于等于要保留的首尾层级总和,直接返回原路径(无需省略) if len(path_parts) <= keep_first + keep_last + 1: # +1是因为要包含文件名 return path # 提取前N个层级、最后M个层级+文件名 first_section = '/'.join(path_parts[:keep_first]) last_section = '/'.join(path_parts[-(keep_last + 1):]) # +1是包含文件名 # 拼接成目标格式 return f"/{first_section}/..../{last_section}" # 应用到你的DataFrame df["formatted_file"] = df["file"].apply(format_file_path, keep_first=4, keep_last=3)
示例效果
输入的原数据:
file /a/b/c/d/e/f/g/h/i/j/k/l/m/n/a.c /a/b/c/d/e/x/b.c
处理后输出:
formatted_file /a/b/c/d/..../l/m/n/a.c /a/b/c/d/e/x/b.c
你可以随时调整keep_first(要保留的开头层级数)和keep_last(要保留的末尾目录数)的参数,比如想保留前5个开头层级,只需要把keep_first改成5即可。
方案二:正则表达式替换
如果偏好用正则处理,也可以写一个匹配规则,不过灵活性不如自定义函数:
# 这里对应保留前4个开头层级、最后3个末尾目录+文件名的规则 df["formatted_file"] = df["file"].str.replace( r'^(/(?:[\w\.-]+/){4})(?:.*?)/((?:[\w\.-]+/){3}[\w\.-]+)$', r'\1..../\2', regex=True )
这个正则会匹配符合长度要求的路径,将中间部分替换为省略号;如果路径长度不够,会直接保留原路径。
备注:内容来源于stack exchange,提问作者user1846251
相关产品推荐
相关产品推荐

