在csv中分离组 - 使用tkinter显示结果

时间:2016-03-08 12:18:18

标签: python csv tkinter

我有一个名为第一列的csv文件,第二列是A或B. 我想分析这个(他们在哪个组中)并将名称放入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 个答案:

答案 0 :(得分: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建议。