如何将此代码转换为oop格式以便重用cod

2024-04-18 15:04:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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]

但我也有一些其他文件,我也想从中创建列表。{我想重用我的代码。所以理想情况下,包括数组在内的所有文件的名称都应该与其他文件相同。在

我对编程非常陌生,所以这证明有点困难。很明显,所有事物的命名都是一样的,我不想这样。因此,通过oop,我希望能够重用我的数学逻辑,而不必复制大量的数学算法和重命名所有的东西。在

显然,我不想只对这4个数组进行计算,保存结果并更改文件名。不,我的程序里所有的东西都必须同时工作。在

我希望我能得到一些技巧。我试图扩大我对oop如何工作的知识面,但事实证明这很困难。我想得到一个关于如何解决我自己的问题的解释是最好的。在

为了重述一下,我从1个文件创建了4个列表。我想从一个不同的文件创建4个额外的列表,但是数组的名称相同。然后我只需要做一次大规模的数学计算,然后让它适用于所有事情。让它为将来引入我的程序的新数据工作。在


Tags: 文件csv代码名称列表date数学数组
2条回答

首先,你一定要做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

^{pr2}$

您可以通过执行以下操作来实现递归:

datagroup = ([], [], [], [])
datagroup = get_datagroup('datafile1.csv', datagroup)
datagroup = get_datagroup('datafile2.csv', datagroup)
datagroup = get_datagroup('datafile3.csv', datagroup)

如果你想要一个数据容器,你可以用一个合适的构造函数(这里是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)

如果你想应用方法(你描述的数学知识),你可能想把这些方法放到类中,你能给出一些更具体的例子来说明你到底想做什么吗?在

相关问题 更多 >