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

Python新手求助:列表正则过滤后分隔符处理及文件名提取

解决提取文件名的问题

嗨,别担心,作为Python新手遇到这类字符串处理问题太正常啦😉。咱们一步步来搞定这个提取文件名的需求:

首先看你的原始数据,每个列表元素是带换行符的字典格式字符串,比如:"{'0_HONOR_1524204351030': 'NEW'}\n"。你之前用split(":")[0]得到的结果带着{',是因为split只按冒号分割了前面部分,还没处理掉多余的大括号和单引号。

这里给你两种简单可靠的解决方法:

方法一:用正则表达式精准匹配文件名

正则可以直接定位你想要的文件名格式(数字+下划线+HONOR+下划线+数字的组合),一步提取目标内容:

import re

# 你的原始列表
listoffiles = ["{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n"]

# 列表推导式+正则提取
filenames = [re.search(r'(\d+_HONOR_\d+)', item).group(1) for item in listoffiles]

print(filenames)
# 输出:['0_HONOR_1524204351030', '0_HONOR_1524204351030']

解释:r'(\d+_HONOR_\d+)'这个正则规则,专门匹配「一个或多个数字 + 下划线 + HONOR + 下划线 + 一个或多个数字」的内容,刚好完全对应你的文件名格式。

方法二:把字符串转成真实字典再取键

因为你的每个元素本质是字典的字符串形式,咱们可以用ast.literal_eval把它转成实际的字典,然后直接取键——这种方法更通用,哪怕以后文件名格式变化,只要字典结构不变就能用:

import ast

# 你的原始列表
listoffiles = ["{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n"]

# 处理每个元素:先去换行符,转字典,再取第一个键
filenames = [list(ast.literal_eval(item.strip()).keys())[0] for item in listoffiles]

print(filenames)
# 输出:['0_HONOR_1524204351030', '0_HONOR_1524204351030']

解释:

  1. item.strip():去掉字符串两端的换行符和空白字符
  2. ast.literal_eval(item.strip()):把字符串转成真实字典(比eval()更安全,不会执行恶意代码)
  3. list(...keys())[0]:取出字典的所有键,转成列表后取第一个(因为你的每个字典只有一个键)

如果文件名格式固定,方法一更高效;如果以后可能有多个键或字典结构变化,方法二更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:24:51