App下載

Python怎么批量將csv文件轉(zhuǎn)化成xml文件?

激萌少女李逵 2021-08-12 18:03:37 瀏覽數(shù) (2372)
反饋

csv是excel中常用的數(shù)據(jù)格式,但這種數(shù)據(jù)格式并不是專門的數(shù)據(jù)存儲(chǔ)方式,在程序中通常用xml來(lái)進(jìn)行數(shù)據(jù)的存儲(chǔ)和傳輸。那么csv怎么轉(zhuǎn)化為xml文件呢?其實(shí)我們可以用python批量轉(zhuǎn)化這兩種文件,接下來(lái)這篇文章就帶你了解如何使用python批量將csv文件轉(zhuǎn)化成xml文件。

一、前言

逗號(hào)分隔值(Comma-Separated Values,CSV,有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?hào)),其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)。純文本意味著該文件是一個(gè)字符序列,不含必須像二進(jìn)制數(shù)字那樣被解讀的數(shù)據(jù)。CSV文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號(hào)或制表符。通常,所有記錄都有完全相同的字段序列,通常都是純文本文件。

可擴(kuò)展標(biāo)記語(yǔ)言,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集,簡(jiǎn)稱XML。是一種用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語(yǔ)言。在電子計(jì)算機(jī)中,標(biāo)記指計(jì)算機(jī)所能理解的信息符號(hào),通過此種標(biāo)記,計(jì)算機(jī)之間可以處理包含各種的信息比如文章等。它可以用來(lái)標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語(yǔ)言進(jìn)行定義的源語(yǔ)言。 它非常適合萬(wàn)維網(wǎng)傳輸,提供統(tǒng)一的方法來(lái)描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。

二、Python代碼實(shí)現(xiàn)

導(dǎo)入用到的庫(kù)

from xml.etree.ElementTree import Element, ElementTree
import csv
from pathlib import Path
import os

創(chuàng)建一個(gè)文件夾,用來(lái)保存轉(zhuǎn)換后的xml文件

# 創(chuàng)建一個(gè)文件夾  用來(lái)保存轉(zhuǎn)換后的xml文件
path = os.path.join('xml_file')
if not os.path.exists(path):
    os.mkdir(path)

獲取所有待轉(zhuǎn)換的csv文件

# 獲取所有待轉(zhuǎn)換的csv文件  返回列表
def list_csv():
    file_path = input('請(qǐng)輸入你存放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 文件轉(zhuǎn)換為 xml 文件

# 將csv文件轉(zhuǎn)換為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))
        # 處理轉(zhuǎn)換
        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 = '
' + '	' * (level + 1)
        child = None
        for child in e:
            beatau(child, level + 1)
        child.tail = child.tail[:-1]
    e.tail = '
' + '	' * level

主函數(shù)調(diào)用

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')

結(jié)果如下:

運(yùn)行結(jié)果

用編輯器打開可以看到 xml 文件的內(nèi)容(我用的Sublime Text),如下所示

xml代碼

以上就是Python批量將csv文件轉(zhuǎn)化成xml文件的文章的詳細(xì)內(nèi)容,更多Python學(xué)習(xí)資料請(qǐng)關(guān)注W3Cschool其它相關(guān)文章!


0 人點(diǎn)贊