2016-03-08 68 views
0

我有一个csv文件,其名称是第一列,第二列是A或B. 我想分析这个(他们在什么组),并把名字放到tkinter的相应文本框中,我会怎么做呢?在csv中分隔组 - 使用tkinter来显示结果

from tkinter import * 
import csv 

master=Tk() 

file=open(file="Book1.csv") 
f=csv.reader(file) 
people=[] 
for column in f: 
    people.append(column[0:2]) 


classAl=Label(master,text='A',width=10).grid(row=1,column=1) 
classA=Text(master,width=10) 
classA.grid(column=1,row=2) 

classbl=Label(master,text='B',width=10).grid(row=1,column=2) 
classB=Text(master,width=10) 
classB.grid(column=2,row=2) 

print(people) 

grouplist=[x[1] for x in people] 
for names in(grouplist): 
    print(names) 

这是编码我到目前为止,我能读懂他们是在什么组,但我不知道如何再放入其相应的名称到正确的位置。 任何帮助,将不胜感激。

回答

1

使用collections.defaultdict,以便将CSV文件的内容通过标签(见this other stackoverflow question

一个列表框将是您的应用程序更合适的窗口小部件。

import csv 
from collections import defaultdict 
from tkinter import * 

grouped = defaultdict(list) 

# Open the csv file and use the defaultdict to group by label. 
with open('Book1.csv', 'r') as fh: 
    book = csv.reader(fh) 
    for name, label in book: 
     grouped[label].append(name) 

master = Tk() 
A_label = Label(master, text='A', width=10).grid(row=1, column=1) 
A_list = Listbox(master, width=10) 
A_list.grid(column=1, row=2) 
for name in grouped['A']: 
    A_list.insert(END, name) 

B_label = Label(master, text='B', width=10).grid(row=1, column=2) 
B_list = Listbox(master, width=10) 
B_list.grid(column=2, row=2) 
for name in grouped['B']: 
    B_list.insert(END, name) 

master.mainloop() 

最好使用with语句(上下文管理器)打开和读取csv文件。

我对代码也应用了一些通用的pep8建议。

+0

谢谢,非常有帮助! –