如何用Python lxml遍历CSV列表生成多标签XML?
使用Python lxml模块将CSV转换为指定XML结构
原始CSV文件内容:
customer, restaurant, drink, dish 1, MC, "C1, C6", "D1, D2, D3"
期望生成的XML结构:
<Example> <Customer> 1 </Customer> <Restaurant> MC </Restaurant> <Drink> <Drink> C1 </Drink> <Drink> C6 </Drink> </Drink> <Dish> D1 </Dish> <Dish> D2 </Dish> <Dish> D3 </Dish> </Example>
你的核心问题是没处理CSV中drink、dish字段的多值拆分,也没实现嵌套/多重复标签的生成逻辑。以下是修正后的完整代码:
import csv from lxml.builder import E import lxml.etree with open('restaurant.csv') as csvfile: example_children = [] for row in csv.DictReader(csv): # 添加Customer和Restaurant元素,同时清洗空格 example_children.append(E.Customer(row['customer'].strip())) example_children.append(E.Restaurant(row['restaurant'].strip())) # 处理嵌套Drink结构:外层Drink包裹多个子Drink标签 drink_items = [d.strip() for d in row['drink'].split(',')] drink_element = E.Drink(*[E.Drink(item) for item in drink_items]) example_children.append(drink_element) # 处理多同级Dish标签 dish_items = [d.strip() for d in row['dish'].split(',')] example_children.extend([E.Dish(item) for item in dish_items]) # 构建根元素Example result = E.Example(*example_children) # 生成格式化的XML并写入文件 tree = lxml.etree.tostring(result, pretty_print=True, encoding='utf-8') with open('output.xml', 'wb') as f: f.write(tree)
关键逻辑说明
- 字段清洗与拆分:用
split(',')拆分多值字段,strip()去除值前后的空格,避免生成带冗余空格的标签内容。 - 嵌套Drink标签:先创建外层
E.Drink元素,再将拆分后的每个饮品作为子E.Drink传入,用*解包列表作为参数实现嵌套。 - 多同级Dish标签:直接生成多个独立的
E.Dish元素,用extend()批量添加到根元素的子元素列表中。 - 语法修正:修复了原代码中
E.Restaurant([row'restaurant'])的语法错误,以及变量名results的拼写错误。
内容的提问来源于stack exchange,提问作者ks1001
相关产品推荐
相关产品推荐

