python - 正确使用类(csv 阅读器示例)

标签 python csv

我已经完成了以下 CSV 阅读器类:

class CSVread(object):
    filtered = []

    def __init__(self, file):
        self.file = file

    def get_file(self):
        try:
            with open(self.file, "r") as f:
                self.reader = [row for row in csv.reader(f, delimiter = ";")]
                return self.reader
        except IOError as err:
            print("I/O error({0}): {1}".format(errno, strerror))
        return

    def get_num_rows(self):
        print(sum(1 for row in self.reader))

可以与以下示例一起使用:

datacsv = CSVread("data.csv") # ; seperated file

for row in datacsv.get_file(): # prints all the rows
    print(row)

datacsv.get_num_rows() # number of rows in data.csv

我的目标是通过关键字“00GG”过滤第 12 列来过滤 csv 文件 (data.csv) 的内容。我可以让它在类之外工作,如下所示:

with open("data.csv") as csvfile:
    reader = csv.reader(csvfile, delimiter = ";")
    filtered = []
    filtered = filter((lambda row: row[12] in ("00GG")), list(reader))

下面的代码在类中定义时返回一个空列表(已过滤):

def filter_data(csv_file):
    filtered = filter((lambda row: row[12] in ("00GGL")), self.reader)
    return filtered

也欢迎对现有代码的反馈。

最佳答案

是否在第一个过滤器示例中您正在搜索 00GG而在第二个中,您正在搜索 00GGL

无论如何,如果你想定义filter_data()在类中,您应该将其编写为类的方法。这意味着需要 self参数,不是 csv_file :

def filter_data(self):
    filtered = filter((lambda row: row[12] in ("00GGL")), self.reader)
    return filtered

使其更通用:

def filter_data(self, column, values):
    return filter((lambda row: row[column] in values), self.reader)

现在你可以这样调用它:

datacsv.filter_data(12, ('00GGL',))

如果输入数据确实包含 00GGL 的行,则该方法应该有效在第 12 栏。

请注意filter_data()只能在 get_file()之后调用否则就没有self.reader 。除非你有充分的理由在CSVread时不读入数据。对象被创建(例如,您的目标是延迟评估),那么您应该读取它。否则,设置 self.reader = []这将防止其他方法失败。

关于python - 正确使用类(csv 阅读器示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697773/

相关文章:

python - 处理错误 "TypeError: Expected tuple, got str"将 CSV 加载到 pandas 多级和多索引 (pandas)

java - 在android中读取CSV文件并将其放入Hashmap中

python - 安装 pywin32 - win32api.pyd 权限被拒绝

python - 使用多个源列扩展 Pandas DataFrame

ubuntu - 在 Ubuntu 中从 CSV 复制到 Postgres

python - 如何在 CSV 行中搜索特定列中的字符串,如果找到则将整行打印到文件

python - 使用 Python 和 Pandas 修剪 CSV 中的列

python - 在使用 SQLAlchemy 进行单元测试期间防止接触数据库

python - Flask Mega 教程在 pythonanywhere 上的初始设置

python - Django 模型查询总和为给定数字的前 N ​​行