1

我对 python 有点陌生,坚持 6.00x(2013 年春季)课程。我希望尝试一些我新发现的知识,但似乎已经过火了。

这个想法是将包含我的银行对帐单的 CSV 文件导入到 python 中。然后我希望将每个事务变成一个类的实例。然后我希望开始使用数据来看看我能做些什么,但我似乎连第一个障碍都失败了,让事情很好地适合我的面向对象程序。

我从这个开始导入我的文件:

import csv
datafile = open('PATH/TO/file.csv', 'r')
datareader = csv.reader(datafile)
data = []
for row in datareader:
    data.append(row)

这似乎行得通。我得到一个如下所示的所有报表数据列表(你会明白我没有上传真实数据......)

[['date', 'type', 'details', 'amount', 'balance', 'accountname', 'accountdetails', 'blank_string'],['date', 'type', 'details', 'amount', 'balance', 'accountname', 'accountdetails', 'blank_string'],['date', 'type', 'details', 'amount', 'balance', 'accountname', 'accountdetails', 'blank_string'],['date', 'type', 'details', 'amount', 'balance', 'accountname', 'accountdetails', 'blank_string']]

所以输入 data[0] 会让我:

['date', 'type', 'details', 'amount', 'balance', 'accountname', 'accountdetails', 'blank_string']

所以我创建了我的类和构造函数。将这些事务中的每一个分解为易于访问的项目的想法。

class Transaction(object):
    """
    Abstract class for building different kinds of transaction
    """
    def __init__(self, data):
        self.date = data[0]
        self.trans_type = data[1]
        self.description = data[2]
        self.amount = data[3]
        self.balance = data[4]
        self.account_type = data[5]
        self.account_details = data[6]

如果我现在输入,我发现这有效

T1 = 交易(数据[0])

但是我不想不断输入 T1 =... T2=... t3=... t4=... 有很多交易需要永远!

所以我尝试了这个!

for i in range(len(data)):
eval("T" + str(i)) = Transaction(data[i])

但是python真的不喜欢那样......它报告回来:

SyntaxError:您的程序中有错误:*无法分配给函数调用(FILENAME.py,第 80 行)

所以我的问题是。为什么我不能迭代地使用 eval() 函数将我的数据作为实例分配到类 Transaction(object) 中?

如果没有办法解决这个问题,我还能怎么做呢?

我还有一个挥之不去的疑问,我的错误表明我错过了有关面向对象编程的一些要点以及何时适合使用它。将我的 csv 数据导入字典并从那里玩弄它会更好吗?

非常感谢!休

4

1 回答 1

3

改用transactions = []列表,只需.append()新建Transaction实例:

transactions = []
for row in datareader:
    transactions.append(Transaction(row))

甚至:

transactions = [Transaction(row) for row in datareader]

无需为每个行结果创建单独的变量。

于 2013-04-02T14:44:09.090 回答