我有一个用于解析.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
文件。
感谢您的帮助!
答案 0 :(得分:0)
您的问题分为两部分:
如何查找比特定时间更新的文件
如何仅附加这些文件中的信息
对于第一个问题,有几种方法。
这显示了如何在目录中获取文件和创建时间:
String line = "";
InputStreamReader inStream = new
InputStreamReader(uc.getInputStream());
buff = new BufferedReader(inStream);
try {
while ((line = b.readLine()) != null) {
String[] fields = parseCsvLine(line);
// I dont know what to do here
}
b.close();
Log.d("Get data from API", "Processing Stop");
} catch (IOException e) {
e.printStackTrace();
}
public String[] parseCsvLine(String line) {
// Create a pattern to match breaks
Pattern p =
Pattern.compile(",(?=([^\"]*\"[^\"]*\")*(?![^\"]*\"))");
// Split input with the pattern
String[] fields = p.split(line);
for (int i = 0; i < fields.length; i++) {
// Get rid of residual double quotes
fields[i] = fields[i].replace("\"", "");
}
return fields;
}
您可以循环创建日期为今天的文件。或者,您可以将已处理的文件移动到&#34;已处理的文件。目录。在任何情况下,您都不应该阅读已经处理过的文件。
关于第二部分,请参阅this question。 tl; dr是你追加到CSV文件,而不是每次从开始创建它。