2016-03-21 5 views
2

Ich lese alle Dateien in einem Ordner nacheinander in einen DataFrame und dann überprüfe ich sie auf einige Bedingungen. Es gibt ein paar tausend Dateien, und ich würde gerne Pandas dazu bringen, eine Exception auszulösen, wenn eine Datei leer ist, so dass meine Reader-Funktion diese Datei überspringen würde.Überspringen von leeren Dateien mit Panda in Python lesen

Ich habe so etwas wie:

class StructureReader(FileList): 
    def __init__(self, dirname, filename): 
     self.dirname=dirname 
     self.filename=str(self.dirname+"/"+filename) 
    def read(self): 
     self.data = pd.read_csv(self.filename, header=None, sep = ",") 
     if len(self.data)==0: 
      raise ValueError 
class Run(object): 
    def __init__(self, dirname): 
     self.dirname=dirname 
     self.file__list=FileList(dirname) 
     self.result=Result() 
    def run(self): 
     for k in self.file__list.file_list[:]: 
      self.b=StructureReader(self.dirname, k) 
      try: 
       self.b.read() 
       self.b.find_interesting_bonds(self.result) 
       self.b.find_same_direction_chain(self.result) 
      except ValueError: 
       pass 

Regular-Datei, die ich für einige Zustand bin auf der Suche wie folgt aussieht:

"A/C/24","A/G/14","WW_cis",, 
"B/C/24","A/G/15","WW_cis",, 
"C/C/24","A/F/11","WW_cis",, 
"d/C/24","A/G/12","WW_cis",, 

aber irgendwie immer ich nicht ValueError angehoben werden, und meine Funktionen Ich suche leere Dateien, was mir eine Menge "Empty Dataframe ..." Zeilen in meiner Ergebnisdatei gibt. Wie kann ich Programm leere Dateien überspringen lassen?

+0

ist das nicht ein Narr dies: http://stackoverflow.com/questions/2507808/python-how-to-check-file-empty-or-not – EdChum

Antwort

3

Ich würde zuerst prüfen, ob die Datei leer ist, und wenn es nicht leer ist, werde ich versuchen, es mit Pandas zu verwenden. hier: https://stackoverflow.com/a/15924160/5088142 Sie können einen schönen Weg finden, um zu überprüfen, ob eine Datei leer ist:

import os 
def is_non_zero_file(fpath): 
    return True if os.path.isfile(fpath) and os.path.getsize(fpath) > 0 else False 
0

Sie Ihre Arbeit mit folgendem Code erledigen, nur Ihren CSVs Pfad zum Variable Pfad hinzufügen und ausführen. Sie sollten ein Objekt raw_data erhalten, das ein Pandas-Datenframe ist.

import os, pandas as pd, glob 
import pandas.io.common 

path = "/home/username/data_folder" 
files_list = glob.glob(os.path.join(path, "*.csv")) 

for i in range(0,len(files_list)): 
    try: 
     raw_data = pd.read_csv(files_list[i]) 
    except pandas.io.common.EmptyDataError: 
     print(files_list[i], " is empty and has been skipped.") 
Verwandte Themen