Чтение файлов из папки и добавление их в файл xlsx - PullRequest
0 голосов
/ 04 марта 2020

У меня есть папка с несколькими сотнями файлов, которая растет каждый час. Я пытаюсь объединить все данные в один файл для анализа использования. Но сценарий, который я написал, не слишком эффективен для обработки этих данных, так как он прочитает все содержимое в папке и добавит его в файл xlsx. Время обработки просто слишком велико. Мне нужно улучшить и улучшить мой сценарий: 1) чтобы иметь возможность только читать и извлекать данные, новые файлы, которые ранее не были прочитаны; 2) извлекать и добавлять эти данные для обновления файла xlxs.

Мне просто нужно немного просветления, чтобы помочь мне улучшить сценарий.

Часть моего кода выглядит следующим образом

import pandas as pd
import numpy as np
import os 
import dask.dataframe as dd
import glob
import schedule
import time 
import re
import datetime as dt


def job():
    # Select the path to download the files 
    path=r'V:\DB\ABCD\BEFORE\8_INCHES'
    files=glob.glob(path+"/*.csv")

    df=None
    # Extracting of information from files 
    for i, file in enumerate (files) :
        if i==0:
             df= np.transpose(pd.read_csv(file,delimiter="|",index_col=False))
             df['Path'] =file
             df['Machine No']=re.findall("MC-11",str(df["Path"]))
             df['Process']= re.findall("ABCD",str(df["Path"]))
             df['Before/After']=re.findall("BEFORE",str(df["Path"]))
             df['Wafer Size']=re.findall("8_INCHES",str(df["Path"]))
             df['Employee ID']=df["Path"].str.extract(r'(?<!\d)(\d{6})(?!\d)',expand=False)
             df['Date']=df["Path"].str.extract(r'(\d{4}_\d{2}_\d{2})',expand=False)
             df['Lot Number']=df["Path"].str.extract(r'(\d{7}\D\d)',expand=False)
             df['Part Number']=df["Path"].str.extract(r'([A-Z]{2,3}\d{3,4}[A-Z][A-Z]\d{2,4}[A-Z])',expand=False)
             df["Part Number"].fillna("ENGINNERING SAMPLE",inplace=True)
        else:
            tmp= np.transpose(pd.read_csv(file,delimiter="|",index_col=False))
            tmp['Path'] =file
            tmp['Machine No']=tmp["Path"].str.extract(r'(\D{3}\d{2})',expand=False)
            tmp['Process']=  tmp["Path"].str.extract(r'(\w{8})',expand=False)
            tmp['Before/After']= tmp["Path"].str.extract(r'([B][E][F][O][R][E])',expand= False)
            tmp['Wafer Size']= tmp["Path"].str.extract(r'(\d\_\D{6})',expand= False)
            tmp['Employee ID']=tmp["Path"].str.extract(r'(?<!\d)(\d{6})(?!\d)',expand=False)
            tmp['Date']=tmp["Path"].str.extract(r'(\d{4}_\d{2}_\d{2})',expand=False)
            tmp['Lot Number']=tmp["Path"].str.extract(r'(\d{7}\D\d)',expand=False)
            tmp['Part Number']=tmp["Path"].str.extract(r'([A-Z]{2,3}\d{3,4}[A-Z][A-Z]\d{2,4}[A-Z])',expand=False)
            tmp["Part Number"].fillna("ENGINNERING SAMPLE",inplace=True)

            df= df.append(tmp)



        export_excel= rf.to_excel(r'C:\Users\hoosk\Documents\Python Scripts\hoosk\test26_feb_2020.xlsx')




#schedule to run every hour 
schedule.every(1).hour.do(job)


while True:
    schedule.run_pending()
    time.sleep(1)

1 Ответ

0 голосов
/ 04 марта 2020

В общих чертах вы захотите сделать следующее:

  1. Прочитать в файле xlsx в начале вашего скрипта.
  2. Извлечь набор со всеми именами файлов уже parsed (атрибут Path)
  3. Для каждого файла, который вы повторяете, проверьте, содержится ли он в наборе уже обработанных файлов.

Это предполагает, что существующие файлы не имеют своего содержимого обновлено. Если это может произойти, вы можете отслеживать такие показатели, как дата последнего изменения (контрольная сумма будет наиболее надежной, но, вероятно, слишком дорогой для вычисления).

...