Как разобрать несколько файлов XML в несколько файлов CSV? - PullRequest
3 голосов
/ 05 июля 2019

Я проанализировал XML-файл, используя этот код, который работает для одного XML-ввода в один CSV-вывод.Я попытался использовать glob для работы с несколькими входами, а также с несколькими выходами csv, но я знаю, что это неправильно.

import glob
import xml.etree.ElementTree as et
import csv

for file in glob.glob('./*.xml'):
    with open(file) as f:
        tree = et.parse(f)
        nodes = tree.getroot()

        with open(f'{f[:-4]}edited.csv', 'w') as ff:
            cols = ['dateTime','x','y','z','motion','isMoving','stepCount','groupAreaId','commit']
            nodewriter = csv.writer(ff)
            nodewriter.writerow(cols)
            for node in nodes:
                values = [ node.attrib.get(kk, '') for kk in cols]
                nodewriter.writerow(values)

Как мне измениться, чтобы получить несколько выводов csv?

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Ваш код в настоящее время использует дескриптор файла для формирования вашего выходного имени файла.Вместо f используйте file следующим образом:

import glob
import xml.etree.ElementTree as et
import csv

for file in glob.glob('./*.xml'):
    with open(file) as f:
        tree = et.parse(f)
        nodes = tree.getroot()

        with open(f'{file[:-4]}edited.csv', 'w') as ff:
            cols = ['dateTime','x','y','z','motion','isMoving','stepCount','groupAreaId','commit']
            nodewriter = csv.writer(ff)
            nodewriter.writerow(cols)
            for node in nodes:
                values = [ node.attrib.get(kk, '') for kk in cols]
                nodewriter.writerow(values)
0 голосов
/ 05 июля 2019

вы можете создать список имен файлов, а затем написать туда xml-файлы.Если выходные файлы уже находятся в директории, то с помощью glob вы можете получить имена.Если файлы не существуют, приведенный ниже код будет создан с использованием заданного имени файла

csvFileNames = ['outputfile1.csv', 'outputfile2.csv']
for file in csvFileNames:
    with open(file, 'w') as f:
        wtr = csv.writer(f)
        wtr.writerows( [[1, 2], [2, 3], [4, 5]]) # write what you want

, чтобы получить имена файлов XML из каталога, вы можете попробовать следующий код:

from os import listdir
filenames = listdir('.') # here dot is used because script and csv files are in the same directory, if XML files are in other directory then set the path inside listdir
xmlFileNames = [ filename for filename in filenames if filename.endswith( ".xml" ) ]

# get xml file names like this, xmlFileNames = ["abc.xml", "ef.xml"]
resultCsvFileNameList = [fname.replace(".xml", ".csv") for fname in xmlFileNames ]
...