如何在Python中跳过用panda读取空文件

Leu*_*noe 5 python dataframe pandas

我将一个文件夹中的所有文件逐个读入DataFrame,然后检查它们的某些条件.有几千个文件,我想在文件为空时让pandas引发异常,这样我的读者功能就会跳过这个文件.

我有类似的东西:

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
Run Code Online (Sandbox Code Playgroud)

我正在搜索某些条件的常规文件如下所示:

"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",,
Run Code Online (Sandbox Code Playgroud)

但不知怎的,我不会被ValueError提升,我的函数正在搜索空文件,这在我的结果文件中给了我很多"空数据框..."行.如何让程序跳过空文件?

Yar*_*ron 6

我首先检查文件是否为空,如果它不是空的,我将尝试将其与pandas一起使用.在这里: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
Run Code Online (Sandbox Code Playgroud)


Ahm*_* M. 6

您可以使用以下代码完成工作,只需将 CSV 路径添加到路径变量中,然后运行即可。你应该得到一个raw_data对象,它是一个 Pandas 数据帧。

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.errors.EmptyDataError:
      print(files_list[i], " is empty and has been skipped.")
Run Code Online (Sandbox Code Playgroud)