Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2013 19:04:31

Pandyash
Зарегистрирован: 2013-03-27
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка по разным столбцам в csv

Задание: написать программу, которая будет загружать 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]

Отредактировано Pandyash (Март 27, 2013 19:05:58)

Прикреплённый файлы:
attachment Panda_data.csv (109 байт)

Офлайн

#2 Март 27, 2013 19:10:51

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Сортировка по разным столбцам в csv

Pandyash
Задание очень срочное, очень-очень горит…
Как бы не сгорело опять до того, как с ним разберутся.

Офлайн

#3 Март 27, 2013 21:53:58

Pandyash
Зарегистрирован: 2013-03-27
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка по разным столбцам в csv

Видимо, сгорит, комментариев никаких (

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version