2016-03-21 90 views
2

我將一個文件夾中的所有文件逐個讀入DataFrame,然後檢查它們是否存在一些條件。有幾千個文件,我很想讓大熊貓在文件爲空的時候拋出異常,這樣我的閱讀器功能就會跳過這個文件。如何跳過用Python中的熊貓讀取空文件

我有類似:

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 
我正在尋找一些條件

常規文件看起來像:

"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",, 

但不知何故,我從來沒有得到ValueError提高了,而我的功能正在搜索空文件,這在我的結果文件中給了我很多「Empty DataFrame ...」行。我如何讓程序跳過空文件?

+0

是不是這是一個騙局:http://stackoverflow.com/questions/2507808/python-how-to-check-file-empty-or-not – EdChum

回答

3

我首先檢查文件是否爲空,如果不是空的,我會嘗試在熊貓中使用它。 這裏:https://stackoverflow.com/a/15924160/5088142,你可以找到一個很好的方法來檢查文件是否爲空:

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

您可以讓您的工作與下面的代碼完成,只需添加您的CSV路徑路徑變量,並運行。你應該得到一個對象raw_data這是一個熊貓數據框。

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.")