将CSV文件读入类__init__中的字段?

时间:2017-04-27 17:12:10

标签: python python-2.7 list

我有一个python类,它读取CSV文件并将信息填充到类中的单独字段中。

class DataCSVReader(object):
    def __init__(self):
        self.data_name1 = []
        self.data_name2 = []
            ....
        self.data_nameN = []

    def read_from_csv(self, filename):
        data = np.genfromtxt(filename, delimiter=',', skip_header=1)
        self.data_name1 = data[:, 1:4]
        self.data_name2 = data[:, 4:8]
                 ...
        self.data_nameN = data[:, 4*(N-1):4*N]

该文件可以正常工作并读取数据。但是我的数据字段 N 的数量相当大,因此我的代码很长而没有太多进展。所以我的问题是:

  1. 有更好的方法来填充数据吗?
  2. 有没有更好的方法来编写init,以便它可以优雅地创建大量的空列表?

2 个答案:

答案 0 :(得分:1)

您可以使用simple list-comprehension创建列表列表,如下所示:

def read_from_csv(self, filename):
    data = np.genfromtxt(filename, delimiter=',', skip_header=1)
    # create a list of lists size of 4
    self.chunked_data = [data[i:i + 4] for i in xrange(0, len(data), 4)]

之后你可以获得带索引的目标吸盘(注意它从0开始),dr.data_name1 - > self.chunked_data[0]

答案 1 :(得分:1)

为了好玩,我提出了一个解决方案,该解决方案采用了嵌套列表的已接受答案的策略来包含数据,但添加了__getattr__方法以允许使用简写{{{{}}轻松访问数据1}}其中self.data_x是列索引。

x