Python新手求助:如何将CSV按每15条记录转换为单个XML文件
Python实现CSV按每15条记录拆分并转XML
下面是针对需求的完整实现代码,注释清晰,适合新手理解和修改:
import csv import xml.etree.ElementTree as ET from itertools import islice def csv_to_split_xml(csv_file_path, batch_size=15): # 打开目标CSV文件,用utf-8编码读取(如果你的CSV是其他编码,比如gbk,替换这里) with open(csv_file_path, mode='r', encoding='utf-8') as csv_file: # 用DictReader读取,可直接通过列名访问字段值 csv_reader = csv.DictReader(csv_file) batch_counter = 1 # 循环分批处理记录 while True: # 读取当前批次的batch_size条记录,islice避免一次性加载全量数据 current_batch = list(islice(csv_reader, batch_size)) if not current_batch: break # 没有剩余记录,结束循环 # 创建XML根节点 root = ET.Element("records") # 遍历批次内的每条记录,生成XML子元素 for record in current_batch: record_element = ET.SubElement(root, "record") # 为每个字段创建对应的XML元素 for field_name, field_value in record.items(): field_element = ET.SubElement(record_element, field_name) field_element.text = field_value # 格式化XML缩进(Python 3.9+支持,低版本可删除此行) ET.indent(root, space=" ", level=0) # 生成XML树对象 xml_tree = ET.ElementTree(root) # 定义输出文件名,按批次编号命名(补零保证排序正确) output_file_name = f"batch_{batch_counter:03d}.xml" # 保存XML文件,写入XML声明 xml_tree.write(output_file_name, encoding='utf-8', xml_declaration=True) print(f"已生成文件: {output_file_name}") batch_counter += 1 # 替换成你的CSV文件路径,运行函数 csv_to_split_xml("your_data.csv")
关键细节说明
- 分批读取:用
itertools.islice分批读取CSV,适合处理大文件,不会占用过多内存 - 字段映射:
csv.DictReader会自动把CSV表头作为键,直接映射到XML的字段名,无需手动指定 - XML格式化:
ET.indent用来给XML加缩进,让输出更易读;如果你的Python版本低于3.9,可以删掉这行,不影响功能 - 文件名规范:用
batch_counter:03d生成带三位编号的文件名(如batch_001.xml),方便后续排序和查找
新手适配提示
- 把代码中的
"your_data.csv"替换成你实际的CSV文件路径 - 如果CSV文件编码不是utf-8,比如中文常用的gbk,修改
open函数里的encoding参数 - 若需要自定义XML结构(比如修改根节点名、字段名),直接调整
ET.Element和ET.SubElement的参数即可 - 测试时可以把
batch_size改成2或3,快速验证功能是否正常
内容的提问来源于stack exchange,提问作者PVG
相关产品推荐
相关产品推荐

