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

Python:如何按日期排序文本数据、过滤无效行并提取指定字段

问题解决思路
  • 原代码全局对整个文本按逗号拆分,没有逐行处理,导致所有行的字段混为一维列表,取值逻辑完全错乱
  • 原代码没有做无效行过滤,空行、包含"No"的行都进入了结果集
  • 原代码没有对单行的第一个字段做拆分,字段数量不符合取值要求
修正后实现代码
txt_data = """
        1. Oliver Nash, DIN-23459818, 2021-09-13, Yes, Opium,
        2. Mary Evans, DIN-23454678, 2021-09-09, Yes, Hydrocone,
        3. Michael Ye, DIN-23456678, 2021-09-12, No,
        """

new_lst = [[]]  # 第0位留空,满足行索引从1开始的调用需求

for line in txt_data.splitlines():
    line = line.strip()
    # 跳过空行
    if not line:
        continue
    # 按逗号拆分,去除每个字段的空白,过滤末尾空字段
    fields = [f.strip() for f in line.split(',') if f.strip()]
    # 过滤包含"No"的行
    if fields[3] == 'No':
        continue
    # 拆分第一个字段的序号和姓名,匹配你需要的字段索引
    serial_num, name = fields[0].split('.', 1)
    serial_num = serial_num.strip()
    name = name.strip()
    # 重组字段结构:[序号, 姓名, DIN, 日期, 标记, 药品]
    processed_line = [serial_num, name] + fields[1:]
    new_lst.append(processed_line)

# 如果需要按日期升序排序,保留以下代码,不需要可注释
new_lst[1:] = sorted(new_lst[1:], key=lambda x: x[3])
效果验证
print(new_lst[1][2])  # 输出 DIN-23459818
print(new_lst[1][3])  # 输出 2021-09-09(排序后第一行是日期最早的记录)
原异常输出原因说明

你原来的代码运行print(newer_lst[1][0])输出D,是因为newer_lst是全局拆分后的一维列表,newer_lst[1]本身就是字符串DIN-23459818,取第0位自然得到首字符D。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:36:03