我有一个解析.xml
文件的脚本。每天我在我的目录中都有新的.xml
文件,我想解析新的。我不知道如何获取目录的新闻文件并用我的脚本解析它们。
我使用下面的代码来解析我的所有.xml
文件。
# coding: utf-8
from lxml import etree as ET
import pandas as pd
import numpy as np
import glob
import sys
import os
path = 'C:\Users\sky\Documents\Results'
#Read one xml file of Dedcoded directory
for filename in glob.glob(os.path.join(path, '*.xml')):
try:
tree = ET.parse(filename)
root = tree.getroot()
# Extract all data from tags
data=[]
for param in root.findall('./Book/Message/Prog//'):
name = param.find('Name')
value = param.find('Value')
if name is not None:
name =name.text
if value is not None:
value =value.text
data.append([name, value])
df_data = pd.DataFrame(data, columns=["Name", "Value"])
df_data = pd.concat([pd.Series(v.values, name=k) for k, v in df_data.groupby('Name')['Value']], axis=1)
# At the end I save my df_dat to a CSV file by this condition, if the file \
#'all_data.csv' does not exist then create this file and add the date into with headers.
if os.path.isfile('all_data.csv') is False:
df_data.to_csv('all_data.csv', mode='w', header=True, index=False)
print '\n', ' File Processed Successfully!', '\n'
# And if it exist already then just append the result without adding the headers
else:
df_data.to_csv('all_data.csv', mode='a', header=False, index=False)
print '\n', ' File Processed Successfully!', '\n'
except:
pass
我每天都运行这段代码,这需要很长时间,因为它也解析旧的.xml
文件。
谢谢你的帮助!
您的问题分为两部分:
对于第一个问题,有几种方法。
这显示了如何在目录中获取文件和创建时间:
from glob import glob
import os
import pandas as pd
import datetime
[(f_name, datetime.datetime.fromtimestamp(os.path.getctime(f_name))) for f_name in glob('*.csv')]
您可以循环创建日期为今天的文件。或者,您可以将已处理的文件移动到“已处理”目录。在任何情况下,您都不应该阅读已经处理过的文件。
第二部分,请参阅this question。 tl; dr是你应该附加到CSV文件,而不是每次从开始创建它。