Python如何提取列表中以指定字符串开头的元素
你所写的前缀匹配筛选方式完全可以实现需求,在此基础上可以做以下优化,并补充导出CSV的完整实现:
一、筛选逻辑优化
你现有代码存在两个可优化的细节:
- 用
range(len(list_x))遍历列表属于冗余写法,直接迭代元素更简洁 - 匹配到的字符串前缀和内容是用制表符分隔的,可直接拆分提取内容,避免后续导出CSV还要二次处理
基础优化版本
name_list = [] file_number_list = [] subject_list = [] held_list = [] pages_list = [] date_list = [] # 直接迭代list_x中的每个元素 for item in list_x: if item.startswith('NAME'): # 拆分制表符,只取后面的内容部分 name_list.append(item.split('\t', 1)[1]) elif item.startswith('FILE NUMBER'): file_number_list.append(item.split('\t', 1)[1]) elif item.startswith('SUBJECT'): subject_list.append(item.split('\t', 1)[1]) elif item.startswith('HELD'): held_list.append(item.split('\t', 1)[1]) elif item.startswith('PAGES'): pages_list.append(item.split('\t', 1)[1]) elif item.startswith('DATE ADDED'): date_list.append(item.split('\t', 1)[1])
精简通用版本
如果后续需要新增匹配字段,推荐用字典统一管理,避免定义大量单独的列表:
# 定义需要匹配的字段和对应存储列表的映射 fields = { 'NAME': [], 'FILE NUMBER': [], 'SUBJECT': [], 'HELD': [], 'PAGES': [], 'DATE ADDED': [] } for item in list_x: for prefix, storage_list in fields.items(): if item.startswith(prefix): storage_list.append(item.split('\t', 1)[1]) break # 后续取值直接调用 fields['NAME'] 即可
二、导出CSV实现
内置csv模块实现(无需额外安装依赖)
import csv import itertools # 按行合并所有列的数据,字段数量不对等时缺失值留空 rows = itertools.zip_longest( name_list, file_number_list, subject_list, held_list, pages_list, date_list, fillvalue='' ) # 写入CSV文件,utf-8-sig编码兼容Excel打开不乱码 with open('司法案例数据.csv', 'w', encoding='utf-8-sig', newline='') as f: writer = csv.writer(f) # 写入表头 writer.writerow(['案件名称', '文件编号', '主题', '判决结果', '页数', '收录日期']) # 写入所有行数据 writer.writerows(rows)
pandas实现(已安装pandas时更便捷)
import pandas as pd df = pd.DataFrame({ '案件名称': name_list, '文件编号': file_number_list, '主题': subject_list, '判决结果': held_list, '页数': pages_list, '收录日期': date_list }) df.to_csv('司法案例数据.csv', encoding='utf-8-sig', index=False)
内容的提问来源于stack exchange,提问作者Lui Hellesoe
相关产品推荐
相关产品推荐

