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