Форум сайта python.su
Задание: написать программу, которая будет загружать csv и позволит делать сортировку по разным столбцам.
Представленный код, вроде, это делает.
Вопросы: можно ли упростить код, оптимизировать его и есть ли какие-либо косяки?
csv с простенькими данными прикрепляется, разделитель - запятая.
Задание очень срочное, очень-очень горит…
Заранее спасибо за помощь )
# coding=utf-8 import codecs import Tkinter import tkFileDialog class CsvViewer(object): #controls label=None controlCanvas=None lineList=[] ENTRY_WIDTH=100 CSV_COL_DELIM=',' def __init__(self): self.init() def init(self): self.root=Tkinter.Tk() #controls self.loadButton=Tkinter.Button(self.root, text= "open file", command=self.chooseFile) self.loadButton.pack(sid="left") self.root.mainloop() def chooseFile(self): filename = tkFileDialog.askopenfilename() if len(filename ) > 0: self.readLines(filename) self.displayText() self.displayColumnButtons() def readLines(self, filename): with codecs.open(filename, 'r', 'utf-8') as fin: self.lineList=[line.strip() for line in fin] def displayText(self): if self.label: self.label.destroy() self.label=Tkinter.Label(self.root,width=self.ENTRY_WIDTH, text='\n'.join(self.lineList)) self.label.pack(side="bottom") def displayColumnButtons(self): if self.lineList: firstLine=self.lineList[0] numOfColumns=self.getNumOfColumns(firstLine) self.createColumnButtons(numOfColumns) def createColumnButtons(self, numOfColumns): self.createControlCanvas() self.placeColumnButtons(numOfColumns) def createControlCanvas(self): if self.controlCanvas: self.controlCanvas.destroy() self.controlCanvas=Tkinter.Canvas(self.root) self. controlCanvas.pack(side="top") def placeColumnButtons(self, numOfColumns): for i in range(0, numOfColumns): Tkinter.Button(self.controlCanvas, text="sort by column "+str(i), command=lambda x=i:self.sortLines(x)).grid(row=0, column=i) def sortLines(self, i): self.lineList=sorted(self.lineList, key=lambda str:str.split(self.CSV_COL_DELIM)[i]) self.displayText() def getNumOfColumns(self, line): return line.count(self.CSV_COL_DELIM)+1
[code python][/code]
Отредактировано Pandyash (Март 27, 2013 19:05:58)
Прикреплённый файлы:
Panda_data.csv (109 байт)
Офлайн
PandyashКак бы не сгорело опять до того, как с ним разберутся.
Задание очень срочное, очень-очень горит…
Офлайн
Видимо, сгорит, комментариев никаких (
Офлайн