Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 代码未按预期写入子目录,内存使用率高_Xml_Python 3.x_Pandas_Csv - Fatal编程技术网

Xml 代码未按预期写入子目录,内存使用率高

Xml 代码未按预期写入子目录,内存使用率高,xml,python-3.x,pandas,csv,Xml,Python 3.x,Pandas,Csv,我在一些子目录中有几个xml文件。我编写了一段代码,将解析后的xml文件转换为pandasDF,然后将其csv写入读取xml数据的子目录。但是,我只在第一个子文件夹中获得输出csv文件。如何保存已解析的xml文件,有没有比编写csv更好的方法?我的长期计划是写信给hdf5。内存使用也是非常高的内存使用率,我以前没有做过任何内存/速度优化,如果你觉得这方面的建议很慷慨,我将不胜感激 import xmltodict import numpy as np import pandas as pd fr

我在一些子目录中有几个xml文件。我编写了一段代码,将解析后的xml文件转换为pandasDF,然后将其csv写入读取xml数据的子目录。但是,我只在第一个子文件夹中获得输出csv文件。如何保存已解析的xml文件,有没有比编写csv更好的方法?我的长期计划是写信给hdf5。内存使用也是非常高的内存使用率,我以前没有做过任何内存/速度优化,如果你觉得这方面的建议很慷慨,我将不胜感激

import xmltodict
import numpy as np
import pandas as pd
from collections import Counter
import os
import glob
import re

#from list of directories, iterate through each directory and apply my functions    
def change_dir (directories):
    for i in directories:
        os.chdir(i)  
        return parse_xml (i)

#Read xml files from each subdir,parse and append to a list            
def parse_xml (subdirectory):
    doc = []
    for i in glob.glob(os.path.join(subdirectory, '*.xml')):
        with open(i, 'r') as fd:
            doc.append(xmltodict.parse(fd.read()))
    return make_pandas(doc)

#Take list of each subdir xml files, create required df and write csv to subdir
def make_pandas (list_parsedFiles):
    logData_list = []
    for xmlval in list_parsedFiles:
        channel_list = xmlval['logs']['log']['logData']['mnemonicList'].split(",")
        temp = [i.split(",") for i in xmlval ['logs']['log']['logData']['data']]
        temp.insert(0, xmlval ['logs']['log']['logData']['unitList'].split(","))
        logData_list.extend(temp)
        df = pd.DataFrame(np.array(logData_list).reshape(len(logData_list),len(channel_list)), columns = channel_list).drop_duplicates()
        df.to_csv('out.csv')

%%capture
tocsv = change_dir (list_smallLogs)

您的代码被破坏了,因为您先对每个目录进行chdir,然后是globdirectory,这意味着您要在foo/foo、bar/bar等中查找文件。不要执行chdir-这是一种糟糕的做法,您应该像以前一样在每个函数调用中指定路径。

您可以发布一个使用此代码的最小示例XML输入文件吗?注意,您可以直接将XML转换为CSV。熊猫/numpy可以保留以满足数据科学的需要@Parfait:当然不是直接的,因为许多XML文档根本没有明显的CSV转换。是的,需要某种类型的编码,例如在这两种类型之间使用通用Python。@JohnZwinck需要XML文件吗?我对它的解析方式很满意。我能够制作熊猫,并在csv中写入1个子目录。我的问题是在每个子目录中导航和写入。这就是我被否决的原因吗?我明白了。我首先将所有文件路径写入一个txt/log文件,并希望使用该文件直接读取数据。但是我找到了chdir soln,所以我试着用它。请看这里-不要使用chdir。这是你问题的根源。