Найти - Пользователи
Полная версия: Сортировка по разным столбцам в csv
Начало » Центр помощи » Сортировка по разным столбцам в csv
1
Pandyash
Задание: написать программу, которая будет загружать 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

CsvViewer()
[code python][/code]
Shaman
Pandyash
Задание очень срочное, очень-очень горит…
Как бы не сгорело опять до того, как с ним разберутся.
Pandyash
Видимо, сгорит, комментариев никаких (
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB