一、前言2 z+ k7 |" `+ K- ]0 ]7 p) w2 T$ d
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列,通常都是纯文本文件。+ ^4 M4 e: M9 H# b
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。# ?. V% f6 }! F' y% J8 r5 H; a) a
二、Python代码实现; F/ }" c- q& x3 J
导入用到的库
9 {; c5 } |$ w# Q
- from xml.etree.ElementTree import Element, ElementTree
- import csv
- from pathlib import Path
- import os
创建一个文件夹,用来保存转换后的xml文件& h' A! J$ j0 E
- # 创建一个文件夹 用来保存转换后的xml文件
- path = os.path.join('xml_file')
- if not os.path.exists(path):
- os.mkdir(path)
获取所有待转换的csv文件
( v$ Q" T( R7 u- # 获取所有待转换的csv文件 返回列表
- def list_csv():
- file_path = input('请输入你存放csv文件的路径:')
- p = Path(file_path)
- csv_files = p.glob('**/*.csv')
- csv_files = [str(csv_file) for csv_file in csv_files]
- return csv_files
将 csv 文件转换为 xml 文件5 ?6 x7 _% ?( H
- # 将csv文件转换为xml
- def csv_to_xml(file_name):
- print(file_name)
- with open(file_name, 'r', encoding='utf-8') as f: # 读取csv文件
- reader = csv.reader(f)
- header = next(reader) # 跳过表头
- root = Element('Datas')
- print('root', len(root))
- # 处理转换
- for row in reader:
- erow = Element('row')
- root.append(erow)
- for tag, text in zip(header, row):
- e = Element(tag)
- e.text = text
- erow.append(e)
- beatau(root)
- return ElementTree(root)
-
-
- def beatau(e, level=0):
- if len(e) > 0:
- e.text = '\n' + '\t' * (level + 1)
- child = None
- for child in e:
- beatau(child, level + 1)
- child.tail = child.tail[:-1]
- e.tail = '\n' + '\t' * level
主函数调用, E/ P- _3 L! s, E4 u) S
- if __name__ == '__main__':
- csv_list = list_csv()
- print(csv_list)
- for index_, item in enumerate(csv_list, start=1):
- print(index_, item)
- et = csv_to_xml(item)
- et.write(path + '/' + 'test_{}.xml'.format(index_), encoding='utf-8')
结果如下:
- M: R7 ?1 r) k, M4 ]& T
|