1
import csv

datafile = csv.reader(open('datafile.csv','rb'), delimiter=",", quotechar='|')
date, data1, data2, data3 = [], [], [], []

for row in datafile:
    date.append(row[0])
    data1.append(row[1])
    data2.append(row[2])
    data3.append(row[3])

这就是我想要做的。如您所见,此代码需要 1 个 csv 文件并从中创建 4 个列表。现在我可以并且会在这些列表上做数学,比如data1[4]-data2[30]

但我还有一些其他文件也想从中创建列表。但我希望能够像上面看到的数学一样重用我的代码(data1[4]-data2[30])。因此,理想情况下,包括数组在内的所有内容都应与其他文件的名称相同。

我对编程非常陌生,所以事实证明这有点困难。显然事情会与命名相同的所有内容发生冲突,我不希望这样。因此,不知何故,通过 oop,我希望能够重用我的数学逻辑,而不必复制一些庞大的数学算法并重命名所有内容。

显然我不想只对这 4 个数组进行数学运算,保存结果并更改文件名。不,一切都必须在我的程序中同时工作。

我希望我能得到一些关于如何做到这一点的提示。我正在尝试扩大我对 oop 如何工作的知识范围,但事实证明这很困难。我在想最好能解释一下如何解决我自己的问题。

回顾一下,我从 1 个文件创建了 4 个列表。我想从不同的文件创建 4 个额外的列表,但数组的名称相同。然后我只需要创建一次我的大量数学计算并让它适用于所有事情。让它适用于我的程序中引入的任何未来的新数据。

4

2 回答 2

2

您想要一个数据容器,您可以通过使用适当的构造函数(此处为init方法)创建一个类来获得它。下面是从两个文件加载数据的示例。

import csv

datafile1 = csv.reader(open('datafile1.csv','rb'), delimiter=",", quotechar='|')
datafile2 = csv.reader(open('datafile2.csv','rb'), delimiter=",", quotechar='|')


class data(object):

    def __init__(self,data_file):

        self.date, self.data1, self.data2, self.data3 = [], [], [], []

        for row in data_file:
            self.date.append(row[0])
            self.data1.append(row[1])
            self.data2.append(row[2])
            self.data3.append(row[3])


data1 = data(datafile1)
data2 = data(datafile2)

如果你想应用方法(你描述的数学东西)你可能想把这些方法放在课堂上,你能给出一些更具体的例子来说明你想要做什么吗?

于 2012-08-22T16:25:47.173 回答
1

首先,您是否一定想做 OOP 而不是程序性的?您可以将大部分内容放在一个函数中并返回一个包含列表的元组(是的,这有点像 python 允许您从函数返回多个值的方式。)

OOP 版本就像@mike-vella 的答案。

在程序上,你可以写:

import csv

def get_datagroup(data):
    # data is the filename = 'datafile.csv'
    datafile = csv.reader(open(data,'rb'), delimiter=",", quotechar='|')
    date, data1, data2, data3 = [], [], [], []

    for row in datafile:
        date.append(row[0])
        data1.append(row[1])
        data2.append(row[2])
        data3.append(row[3])

    return (date, data1, data2, data3)

datagroup1 = get_datagroup('datafile1.csv')
datagroup2 = get_datagroup('datafile2.csv')

问题:您想将每个连续文件的数据附加到相应的列表中吗?我猜是的,因为您使用过append

import csv

def get_datagroup(data, data_tuples):
    # data is the filename = 'datafile.csv'
    # data_tuples holds date, data1,2,3
    datafile = csv.reader(open(data,'rb'), delimiter=",", quotechar='|')

    # you can use: data_tuples[0], data_tuples[1], data_tuples[2], data_tuples[3]
    # instead of : date,           data1,          data2,          data3
    date, data1, data2, data3 = data_tuples

    for row in datafile:
        date.append(row[0])
        data1.append(row[1])
        data2.append(row[2])
        data3.append(row[3])

    return (date, data1, data2, data3)

#initially, data tuples are empty
datagroup1 = get_datagroup('datafile1.csv', ([], [], [], []))
#then pass each subsequent call the last call's result tuple
#so that datagroup2 will have the results of datagroup1 and the new stuff
datagroup2 = get_datagroup('datafile2.csv', datagroup1)

您可以通过以下方式进行递归:

datagroup = ([], [], [], [])
datagroup = get_datagroup('datafile1.csv', datagroup)
datagroup = get_datagroup('datafile2.csv', datagroup)
datagroup = get_datagroup('datafile3.csv', datagroup)
于 2012-08-22T16:54:12.347 回答