如何用Python将多个CSV文件合并转换为单个XML文件
多CSV合并转单个XML的实现方案
核心思路
把读取单个CSV的逻辑封装成可复用的函数,遍历所有需要处理的CSV文件,将所有数据合并到同一个列表,最后一次性生成格式合法的完整XML文件(原代码缺少XML声明和根节点,会导致XML结构不合法,需要补全)。
修改后的完整代码
import csv # 封装读取单个CSV数据的函数,自动跳过表头 def read_csv_data(file_path): data = [] with open(file_path, 'r') as f: csv_reader = csv.reader(f) next(csv_reader, None) # 跳过第一行表头 for row in csv_reader: data.append(row) return data # 定义所有需要处理的CSV文件路径列表 target_csv_files = [ 'Final Mission Arvada Import\Import Files\Client_Final.csv', 'Final Mission Arvada Import\Import Files\Your_Second_Client.csv' # 替换为你的第二个CSV路径 ] # 合并所有CSV的数据到同一个列表 all_client_data = [] for csv_file in target_csv_files: all_client_data.extend(read_csv_data(csv_file)) # 保持原有的行转XML节点逻辑不变 def convert_row_to_xml(row): return """ <hmis:Client hmis:dateCreated="%s" hmis:dateUpdated="%s" hmis:userID="%s"> <hmis:PersonalID>%s</hmis:PersonalID> <hmis:FirstName hmis:hashStatus="1">%s</hmis:FirstName> <hmis:MiddleName hmis:hashStatus="1">%s</hmis:MiddleName> <hmis:LastName hmis:hashStatus="1">%s</hmis:LastName> </hmis:Client>""" % (row[1],row[2],row[3],row[4],row[5],row[6],row[7]) # 生成完整合法的XML文件 with open('Combined_Client.xml', 'w') as xml_file: # 写入XML声明和根节点(替换命名空间URL为你实际使用的) xml_file.write('<?xml version="1.0" encoding="UTF-8"?>\n') xml_file.write('<hmis:Clients xmlns:hmis="http://your-hmis-namespace-url">\n') # 写入所有转换后的Client节点 xml_file.write('\n'.join([convert_row_to_xml(row) for row in all_client_data])) # 闭合根节点 xml_file.write('\n</hmis:Clients>')
关键改动说明
- 复用读取逻辑:
read_csv_data函数负责处理单个CSV的读取和表头跳过,后续新增CSV只需在target_csv_files列表里添加路径即可 - 合并数据:用
extend方法将每个CSV的行数据追加到总列表,确保所有数据被统一收集 - 补全XML结构:原代码仅生成零散的
Client节点,不符合XML规范,必须添加XML声明和包含所有子节点的根节点,记得替换示例中的命名空间URL为你实际项目使用的地址
内容的提问来源于stack exchange,提问作者john_207
相关产品推荐
相关产品推荐

