| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 
 | import csv
from Tkinter import *
import os
from tkFileDialog import askopenfilename
 
 
 
class OrganiseCSV:
 
    def __init__(self,fileIn):
        self.fichier=fileIn
 
    def transform(self):
        file = open(self.fichier, "rb")
        outPole="Pole_%d" % self.fichier
        outEquip1="Equip1_%d"% self.fichier
        outEquip2="Equip2_%d"% self.fichier
        outSupply="Supply_%d"% self.fichier
        outHouse="House_%d"% self.fichier
        filePole = open(outPole, "wb")
        fileEquip1 = open(outEquip1, "wb")
        fileEquip2 = open(outEquip2, "wb")
        fileSupply = open(outSupply, "wb")
        fileHouse = open(outHouse, "wb")
 
        list=[]
 
        poleRow=[0,1,2,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,3,4,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37]
        supplyRow=[0,1,2,6,8,10,12,14,16,18,20,22,24,26,28,30,0,1,2,3,4,5,6,7,9,11,13,15,17,19,21,23,25,27,29]
        Equip1Row=[0,1,2,6,8,10,12,14,16,18,20,22,24,26,28,30,32,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37]
        Equip2Row=[0,1,2,6,8,10,12,14,16,18,20,22,24,26,28,30,32,5,7,9,11,13,15,17,19,21,23,25]
        HouseRow=[0,1,2,6,8,10]
 
        try:
            reader = csv.reader(file)
 
            writer = csv.writer(filePole)   #on creer un fichier par type d objet
            writerSupply=csv.writer(fileSupply)
            writerEquipment1=csv.writer(fileEquip1)
            writerEquipment2=csv.writer(fileEquip2)
            writerHouse=csv.writer(fileHouse)
 
           #Ce qui suit renseigne le nom des colonnes
            writer.writerow( (['Point Id','Easting','Northing','Pole Number','Material','Earthing','Cattle Collar','Envir_Sign_ID','Running_Earth','No_of_HV','No_of_LV','1_Phase_Color','ABC,SLight_Conduc','No_of_Stays','Stay_Type_1','Stay_Type_2','Stay_Type_3','Supply_No1','Connec_Type_1','Supply_No2','Connec_Type_2','Supply_No3','Connec_Type_3','Supply_No4','Connec_Type_4','Supply_No5','Connec_Type_5','Supply_No6','Connec_Type_6','Term_Type','StreetLight','Power_Watch','TX_Type','Stock_Code','Input_Voltage','Output_Voltage','Input_Phase','Rating_kVA','2nd_Voltage','Year_of_Manuf','Manufacturer','Tap_Position','Load_Break_Sw','Pole_Top_Swit','HV_Disconnect','Drop_Out_Fuse','Recloser','Isolator','Sectionaliser','Unsafe_Equpmn','HV_Isolator','LV_Isolator','Krone_Box','Photo_No','Other']) )
            writerSupply.writerow( (['Point Id','Easting','Northing','Pole Number','Supply_No1','Connection1','Supply_No2','Connection2','Supply_No3','Connection3','Supply_No4','Connection4','Supply_No5','Connection5','Supply_No6','Connection6'] ) )
            writerEquipment1.writerow( (['Point Id','Easting','Northing','Pole Number','Term_Type','StreetLight','Power_Watch','TX_Type','Stock_Code','Input_Volts','Output_Volts','Input_Phase','Rating_kVA','2nd_Voltage','Year_of_Manuf','Manufacturer','Tap_Position']) )
            writerEquipment2.writerow( (['Point Id','Easting','Northing','Pole Number','Load_Break_Sw','Pole_Top_Swit','HV_Disconnect','Drop_Out_Fuse','Recloser','Isolator','Sectionaliser','Unsafe_Equpmn','HV_Isolator','LV_Isolator','Krone_Box']) )
            writerHouse.writerow( (['Point Id','Easting','Northing','Pole Number','HouseNo']) )
 
 
            for row in reader:                  #lire chaque ligne
                if row[4]=='Pole':              # s il s agit d un pole
                    for i in range(0,38):       #parcourir la liste polerow de 1 a 38
                        a=poleRow[i]            # on met dans les l ordre les valeurs
                        c=str(row[i])           #!!!! on peut peut etre enleve la variable c ou QUOI? 
                        list[i:i]=[row[a]]      #puis on les enregistres dans une liste
                        contenu=list[0:19]      #nombre de colonne
                        if i==19:
                            writer.writerow( (contenu)) #on imprime ensuite cette liste en gardant uniquement ce les valeurs qui nous interessent
 
                elif row[4]=='Supply_To':
                    for i in range(0,30):       
                        a=Equip1Row[i]
                        c=str(row[i])
                        list[i:i]=[row[a]]
                        contenu=list[0:16]
                        if i==16:
                            writerSupply.writerow( (contenu))
 
                elif row[4]=='Equipment1':
                    for i in range(0,32):
                        a=Equip1Row[i]
                        c=str(row[i])
                        list[i:i]=[row[a]]
                        contenu=list[0:17]
                        if i==17:
                            writerEquipment1.writerow( (contenu))
 
                elif row[4]=='Equipment2':
                    for i in range(0,28):
                        a=Equip2Row[i]
                        c=str(row[i])
                        list[i:i]=[row[a]]
                        contenu=list[0:15]
                        if i==15:
                            writerEquipment2.writerow( (contenu))
 
                else :
                    for i in range(0,6):
                        a=HouseRow[i]
                        c=str(row[i])
                        list[i:i]=[row[a]]
                        contenu=list[0:4]
                        if i==4:
                            writerHouse.writerow( (contenu))
 
 
        finally:
            #
            # Fermeture du fichier source
            file.close()
        print "done"
        filePole.close() # si on omet de clore le fichier l output ne marche pas.
        fileEquip1.close()
        fileEquip2.close()
        fileSupply.close()
        fileHouse.close()
 
class mywidgets:
    def __init__(self,root):
        frame=Frame(root)
        self.makeMenuBar(frame)
        frame.pack()
        return
 
    #defines menubar
    def makeMenuBar(self,frame):
        menubar = Frame(frame,relief = RAISED,borderwidth = 1)
        menubar.pack()
        mb_file = Menubutton(menubar,text = 'file')
        mb_file.pack(side = LEFT)
        mb_file.menu = Menu(mb_file)
        mb_file.menu.add_command(label = 'open',command = self.file_open)
        mb_edit = Button(menubar,text = 'process', command = self.process)
        mb_edit.pack(side = LEFT)
 
        mb_file['menu'] = mb_file.menu
        return
    #defines file_open which is called when file option openis choosen
    #displays the files giving the user choice to choose file
    def file_open(self):
        filename =askopenfilename(filetypes=[("allfiles","*"),("csv files","*.csv")])
        print filename
        fname=os.path.basename(filename)
        fname2=str(fname)
        print fname
        return fname2
 
    #creer une instance de OrganiseCSV et lance la transformation
    def process(fname2):
        convert=OrganiseCSV(fname2)
        convert.transform()
 
 
def main():
    root = Tk()
    k = mywidgets(root)
    root.title('PyCSV Converter')
    root.mainloop()
main() | 
Partager