Python将XML转换为CSV时如何为CSV文件字段添加双引号?
解决方案
首先补全代码缺失的依赖导入,再调整DataFrame.to_csv()的输出参数即可实现需求,核心用到csv模块内置的引用规则常量:
关键修改点
- 补全缺失的导入:
glob、os、csv三个模块 - 调整
to_csv的参数,指定quoting=csv.QUOTE_NONNUMERIC:自动给所有非数值类型的内容(表头、字符串字段)添加双引号,数值类型保持无引号格式
修改后完整代码
import pandas as pd import xml.etree.ElementTree as ET import glob import os import csv # 新增导入,用于控制CSV引用规则 def xml_to_csv(path): xml_list = [] print(path) for xml_file in glob.glob(path + '/*.xml'): tree = ET.parse(xml_file) root = tree.getroot() for member in root.findall('object'): value = (root.find('filename').text, int(root.find('size')[0].text), int(root.find('size')[1].text), member[0].text, int(member[4][0].text), int(member[4][1].text), int(member[4][2].text), int(member[4][3].text) ) xml_list.append(value) column_name = ['image', 'width', 'height', 'name', 'xmin', 'ymin', 'xmax', 'ymax'] xml_df = pd.DataFrame(xml_list, columns=column_name) return xml_df def main(): for folder in ['train']: image_path = os.path.join(os.getcwd(), ('images/' + folder)) xml_df = xml_to_csv(image_path) # 修改输出参数,指定非数值类型加双引号 xml_df.to_csv(('images/' + folder + '_labels.csv'), index=None, quoting=csv.QUOTE_NONNUMERIC) print('Successfully converted xml to csv.') main()
效果验证
修改后输出的CSV会完全符合预期:
- 所有表头字段自动添加双引号
- 字符串类型字段(image、name)带双引号
- 数值类型字段(width、height、坐标字段)无引号,保持纯数字格式
内容的提问来源于stack exchange,提问作者jake
相关产品推荐
相关产品推荐

