Python-使用导入的CSV数据自动化变量命名

时间:2013-04-02 14:42:15

标签: python oop csv eval

我对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']]

因此输入数据[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数据输入到字典中,因为它已导入并在那里播放它?

非常感谢! 休

1 个答案:

答案 0 :(得分:3)

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

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

甚至:

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

不需要为每行结果创建单独的变量。