1 2 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