如何拆分嵌套列表中指定元素并生成新列表写入CSV
解决嵌套列表指定字段拆分并写入CSV的问题
需求梳理
- 处理经JSON解析得到的嵌套列表,每个子列表的**第5个元素(索引4)**需按
-拆分 - 仅操作该字段,其他含
-的元素不处理;若该字段为空/None,则保留空值 - 拆分后用两个新元素替换原元素,生成新结构的列表后写入CSV并添加表头
- 列表规模为数百到数千条,优先使用Python 3.10标准库,也可使用Pandas 2.0.2
原代码问题分析
你提供的代码存在两个核心问题:
- 索引越界:未处理子列表长度不足5的情况,直接访问
i[4]会触发IndexError - 逻辑错误:直接调用
result_list.append()是把拆分后的列表作为新的子列表追加,而非替换原列表中的对应元素;同时遍历过程中修改原列表会导致循环异常
方案1:Python标准库实现(csv模块)
通过创建新列表存储处理后的结果,避免遍历原列表时修改结构引发的问题,同时增加长度校验防止索引越界:
import csv # 假设你的原始嵌套列表是result_list,表头自定义 header = ["字段1", "字段2", "字段3", "字段4", "拆分后字段A", "拆分后字段B"] processed_list = [] for sub_list in result_list: # 先复制原列表前4个元素(索引0-3) new_sub = sub_list[:4] # 处理索引4的元素 try: target_val = sub_list[4] if target_val is None or not str(target_val).strip(): # 空值/None,添加两个空元素 new_sub.extend(["", ""]) else: # 按'-'拆分,最多拆1次(避免多'-'导致拆分出多个元素) split_parts = str(target_val).split('-', 1) # 不足2个元素的话补空值 while len(split_parts) < 2: split_parts.append("") new_sub.extend(split_parts) except IndexError: # 子列表长度不足5,直接补两个空元素 new_sub.extend(["", ""]) processed_list.append(new_sub) # 写入CSV with open("output.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(header) writer.writerows(processed_list)
方案2:Pandas实现(更简洁)
利用Pandas的字符串拆分功能,一步完成字段拆分和列合并:
import pandas as pd # 假设原始嵌套列表转换为DataFrame,表头自定义 header = ["字段1", "字段2", "字段3", "字段4", "待拆分字段"] df = pd.DataFrame(result_list, columns=header) # 拆分索引4的列,expand=True拆分为两列,缺失值填充空字符串 split_df = df["待拆分字段"].str.split('-', n=1, expand=True).fillna("") split_df.columns = ["拆分后字段A", "拆分后字段B"] # 合并原DataFrame的前4列和拆分后的列 final_df = pd.concat([df.iloc[:, :4], split_df], axis=1) # 写入CSV final_df.to_csv("output_pandas.csv", index=False, encoding="utf-8")
内容的提问来源于stack exchange,提问作者bashSudo
相关产品推荐
相关产品推荐

