MTM*_*TMA 13 python csv class tkinter items
我是python的新手,并且在我去的时候一直在努力教自己(不是这个深入python的最好的方法,但是为了时间的缘故我也需要).我导入的模块是Tkinter和csv.如果您有任何疑问,请告诉我.
为了简洁起见,我不打算在此处发布我的整个代码,但是我将包含整个错误并指出错误适用的行.下面的所有内容都在名为MainApp的类中.
def SubmitEdit(self):
self.key=""
self.val=""
new_rows = []
self.changes = {self.key:self.val}
with open("info.csv",'rb') as f:
reader = csv.reader(f):
for row in reader:
new_row = row
for field in row:
if field == "NAME":
print "groovy"
for (self.key,self.val) in self.changes.items():
new_row = [ x.replace(self.key,self.val) for x in new_row]
new_rows.append(new_row)
with open("info.csv","wb") as f:
writer = csv.writer(f):
writer.writerows(new_rows)
Run Code Online (Sandbox Code Playgroud)
我分别编写了这个代码,以确保它在将它放入程序之前工作并且它工作得很好,但是当我把它放在类中并进行更改时(我想)我需要对代码/变量行做出来没用.所以这让我相信我只是纠正错误的东西.
这是错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py",line 1536, in__call__
return self.func(*args)
File "C:\Python27\draft.py", line 328, in SubmitEdit
for (self.key,self,val) in self.changes:
AttributeError: 'set' object has no attribute 'items'
Run Code Online (Sandbox Code Playgroud)
第328行引用self.changes.items()中的行:"或(self.key,self.val):"
我已经改变了(我觉得)"自我"的存在与否.对于所有变量,但我无法让它工作.
编辑:我改变代码看起来像这样:
def SubmitEdit(self):
new_rows = []
self.changes = {"MTMA",123}
with open("info.csv",'rb') as f:
reader = csv.reader(f):
for row in reader:
new_row = row
for field in row:
if field == "NAME":
print "groovy"
for (key,val) in self.changes.items():
new_row = [ x.replace(key,val) for x in new_row]
new_rows.append(new_row)
with open("info.csv","wb") as f:
writer = csv.writer(f):
writer.writerows(new_rows)
Run Code Online (Sandbox Code Playgroud)
根据评论,但仍然得到完全相同的错误.
Ana*_*mar 29
从最新更新的代码中可以看到 -
self.changes = {"MTMA",123}
Run Code Online (Sandbox Code Playgroud)
当您如上所述定义self.changes时,实际上是在定义一个集合,而不是字典,因为您使用','(逗号)而不是冒号,我很确定在您的实际代码中您使用的是逗号本身,而不是冒号.
要定义一个字典,其中"MTMA"为键,123为值,请在它们之间使用冒号,示例 -
self.changes = {"MTMA":123}
Run Code Online (Sandbox Code Playgroud)
在您的实际代码中也做类似的事情.
如果您想要的是一个空字典,请将其定义为 -
self.changes = {}
Run Code Online (Sandbox Code Playgroud)