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
相关产品推荐
相关产品推荐

