以下是我一段时间以来一直在研究的一段代码。我已经能够无错误地编译和运行代码。但是,我在代码中将变量从一个函数传递到另一个函数时遇到了困难。
在我运行choose()
并根据所需索引创建self.newLists
后,问题似乎就出现了。您会注意到我在此功能的末尾添加了print(self.newLists)
,以便我可以检查它是否正在生成我想要的内容。
下一个函数simplify()
是我的问题出现的地方。当我尝试从前一个函数传递self.newLists
时,它似乎没有产生任何东西。我还尝试打印和/或返回名为answer
的变量,但它返回"无"。我已经绊倒了这个障碍一段时间没有任何进展。下面是我正在处理的代码以及我希望simplify()
生成的示例。
from tkinter import *
from tkinter.filedialog import askopenfilename
class myFileOpener:
def __init__(self, master):
frame = Frame(master)
frame.pack()
print()
self.newLists = ()
self.printButton = Button(frame, text="Select File", command=self.openfile)
self.printButton.pack(side=LEFT)
self.runButton = Button(frame, text="Run", command=self.combine)
self.runButton.pack(side=LEFT)
self.quitButton = Button(frame, text="Quit", command=frame.quit)
self.quitButton.pack(side=LEFT)
def openfile(self):
filename = askopenfilename(parent=root)
self.lines = open(filename)
# print(self.lines.read())
def choose(self):
g = self.lines.readlines()
for line in g:
matrix = line.split()
JD = matrix[2]
mintime = matrix[5]
maxtime = matrix[7]
self.newLists = [JD, mintime, maxtime]
print(self.newLists)
def simplify(self):
dates = {}
for sub in self.newLists:
date = sub[0]
if date not in dates:
dates[date] = []
dates[date].extend(sub[1])
answer = []
for date in sorted(dates):
answer.append([date] + dates[date])
return answer
def combine(self):
self.choose()
self.simplify()
root = Tk()
b = myFileOpener(root)
root.mainloop()
simplify()
所需输出的示例:
[['2014-158', '20:07:11.881', '20:43:04.546', '20:43:47.447', '21:11:08.997', '21:11:16.697', '21:22:07.717'],
['2014-163', '17:12:09.071', '17:38:08.219', '17:38:28.310', '17:59:25.649', '18:05:59.536', '18:09:53.243', '18:13:47.671', '18:16:53.976', '18:20:31.538', '18:23:02.243']]
它基本上按特定日期分组。
答案 0 :(得分:2)
您没有制作列表清单。你是重置 self.newLists
每个循环迭代,到一个包含3个元素的列表:
for line in g:
matrix = line.split()
JD = matrix[2]
mintime = matrix[5]
maxtime = matrix[7]
self.newLists = [JD, mintime, maxtime]
您需要使用list.append()
将这3个元素添加到您在循环之外设置一次的列表中:
self.newLists = []
for line in g:
matrix = line.split()
JD = matrix[2]
mintime = matrix[5]
maxtime = matrix[7]
self.newLists.append([JD, mintime, maxtime])
您的simplify
方法是将mintime
的个别字符添加到您的输出列表中:
for sub in self.newLists:
date = sub[0]
if date not in dates:
dates[date] = []
dates[date].extend(sub[1])
您希望在list.append()
使用list.extend()
,而不是dict.setdefault()
。可以使用for date, mintime, maxtime in self.newLists:
dates.setdefault(date, []).append(mintime)
简化该循环,而不是手动测试密钥:
{{1}}