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如何工作的知识范围,但证明是困难的。我在想如何解决如何解决自己的问题是最好的。
所以回顾一下,我有4个从1个文件创建的列表。我想从另一个文件创建另外4个列表,但是这些列表的名称相同。然后我只需要创建一次大量的数学计算,让它适用于所有事情。并且它可以用于我的程序中引入的任何未来的新数据。
答案 0 :(得分:1)
您需要一个数据容器,您可以通过使用适当的构造函数(此处为 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)
如果你想应用方法(你描述的数学东西),你可能想把这些方法放在课堂上,你能给出一些更具体的例子来说明你想要做什么吗?
答案 1 :(得分: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)