如何从python目录中获取所有新文件?

时间:2018-05-18 13:08:23

标签: python xml pandas glob sys

我有一个用于解析.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文件。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您的问题分为两部分:

  1. 如何查找比特定时间更新的文件

  2. 如何仅附加这些文件中的信息

  3. 对于第一个问题,有几种方法。

    这显示了如何在目录中获取文件和创建时间:

            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文件,而不是每次从开始创建它。