Advertisement
Guest User

Untitled

a guest
Jan 4th, 2018
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.93 KB | None | 0 0
  1. import csv
  2. import codecs
  3. import urllib.request
  4. from itertools import islice
  5. from operator import itemgetter
  6. from decimal import *
  7. import time
  8. from datetime import datetime
  9. import re
  10. import pyodbc
  11.  
  12. ###################################################################
  13. """
  14. Script écrit par Fahd FETTAHI pour ELECO CAPITAL
  15.  
  16. Janvier 2018
  17.  
  18. """
  19. ###################################################################
  20.  
  21. site_code = [
  22. 'SolarGIS_min15_1_Alzonne_1_',
  23. 'SolarGIS_min15_2_Alzonne_2_',
  24. 'SolarGIS_min15_3_Bar_Alain_',
  25. 'SolarGIS_min15_4_Bar_Fabrice_',
  26. 'SolarGIS_min15_5_Bossu_1_',
  27. 'SolarGIS_min15_6_Bossu_2_',
  28. 'SolarGIS_min15_7_Bossu_3_',
  29. 'SolarGIS_min15_8_Bossu_4_',
  30. 'SolarGIS_min15_9_Bossu_5_',
  31. 'SolarGIS_min15_10_Bossu_6_',
  32. 'SolarGIS_min15_11_Bourret_',
  33. 'SolarGIS_min15_12_Bousquet_',
  34. 'SolarGIS_min15_13_Brosse_',
  35. 'SolarGIS_min15_14_Brunel_',
  36. 'SolarGIS_min15_15_Buathier_1_',
  37. 'SolarGIS_min15_16_Buathier_2_',
  38. 'SolarGIS_min15_17_Bulteau_1_',
  39. 'SolarGIS_min15_18_Bulteau_2_',
  40. 'SolarGIS_min15_19_Cave_Canet_1_',
  41. 'SolarGIS_min15_20_Cave_Canet_2_',
  42. 'SolarGIS_min15_21_Cave_Canet_3_',
  43. 'SolarGIS_min15_22_Cave_Canet_4_',
  44. 'SolarGIS_min15_23_Cave_Canet_5_',
  45. 'SolarGIS_min15_24_Cave_Canet_6_',
  46. 'SolarGIS_min15_25_Chabas_1_',
  47. 'SolarGIS_min15_26_Chabas_2_',
  48. 'SolarGIS_min15_27_Champion_',
  49. 'SolarGIS_min15_28_Chassagnoux_',
  50. 'SolarGIS_min15_29_Chenou_1_',
  51. 'SolarGIS_min15_30_Chenou_2_',
  52. 'SolarGIS_min15_31_Chocian_',
  53. 'SolarGIS_min15_32_CLAIR_Jean-Marie_and_FOURNEL_Laurence_',
  54. 'SolarGIS_min15_33_Croix_Rouge_',
  55. 'SolarGIS_min15_34_CROUZILLES_1_',
  56. 'SolarGIS_min15_35_CROUZILLES_2_',
  57. 'SolarGIS_min15_36_Cruscades_1_',
  58. 'SolarGIS_min15_37_Cruscades_2_',
  59. 'SolarGIS_min15_38_Dezillie_',
  60. 'SolarGIS_min15_39_DUC_Amandine_',
  61. 'SolarGIS_min15_40_Dumas_',
  62. 'SolarGIS_min15_41_EARL_du_pont_',
  63. 'SolarGIS_min15_42_EXAPAC_',
  64. 'SolarGIS_min15_43_Fenaison_',
  65. 'SolarGIS_min15_44_GAEC_DE_REDONDET_',
  66. 'SolarGIS_min15_45_GAEC_La_Tendrerie_',
  67. 'SolarGIS_min15_46_GAYET_',
  68. 'SolarGIS_min15_47_Gougne_Alain_',
  69. 'SolarGIS_min15_48_Gougne_Delphine_',
  70. 'SolarGIS_min15_49_GRAVIER_',
  71. 'SolarGIS_min15_50_Hedde_',
  72. 'SolarGIS_min15_51_Hemar_',
  73. 'SolarGIS_min15_52_KEISER_',
  74. 'SolarGIS_min15_53_La_florentaise_1_',
  75. 'SolarGIS_min15_54_La_florentaise_2_',
  76. 'SolarGIS_min15_55_LABEILLE_Rgine_',
  77. 'SolarGIS_min15_56_LAFON_',
  78. 'SolarGIS_min15_57_Lapalud_',
  79. 'SolarGIS_min15_58_Ma_Nouvelle_Mutuelle_',
  80. 'SolarGIS_min15_91_Ma_Nouvelle_Mutuelle_',
  81. 'SolarGIS_min15_92_Ma_Nouvelle_Mutuelle_',
  82. 'SolarGIS_min15_59_Meallares_',
  83. 'SolarGIS_min15_60_Mr_Arsac_1_',
  84. 'SolarGIS_min15_61_Mr_Arsac_2_',
  85. 'SolarGIS_min15_62_Navy_Service_',
  86. 'SolarGIS_min15_63_OTECH_',
  87. 'SolarGIS_min15_64_PEYRE_',
  88. 'SolarGIS_min15_65_Pinguet_1_',
  89. 'SolarGIS_min15_66_Pinguet_2_',
  90. 'SolarGIS_min15_67_Relais_Vert_1_',
  91. 'SolarGIS_min15_68_Relais_Vert_2_',
  92. 'SolarGIS_min15_69_Renard_',
  93. 'SolarGIS_min15_70_Reynal_',
  94. 'SolarGIS_min15_71_Roux_Claude_1_',
  95. 'SolarGIS_min15_72_Roux_Claude_2_',
  96. 'SolarGIS_min15_73_Roux_Jeremy_',
  97. 'SolarGIS_min15_74_SCI_Tournecamp_',
  98. 'SolarGIS_min15_75_Sud_Cereales_',
  99. 'SolarGIS_min15_76_Sunsteel_',
  100. 'SolarGIS_min15_77_T1271_',
  101. 'SolarGIS_min15_78_T1274_',
  102. 'SolarGIS_min15_79_T3203-Courties_1_',
  103. 'SolarGIS_min15_80_T3203-Courties_2_',
  104. 'SolarGIS_min15_81_T3227-Terraube_',
  105. 'SolarGIS_min15_82_T4602_1_',
  106. 'SolarGIS_min15_83_T4604_2_',
  107. 'SolarGIS_min15_84_T8107-Montredon_',
  108. 'SolarGIS_min15_85_T8208_',
  109. 'SolarGIS_min15_86_Vergne_',
  110. 'SolarGIS_min15_87_Vialle_',
  111. 'SolarGIS_min15_88_Vidal_',
  112. 'SolarGIS_min15_89_Vitrolles_1_',
  113. 'SolarGIS_min15_90_Vitrolles_2_']
  114.  
  115. coeff_pond = [
  116. (1,0.479289940828402),
  117. (2,0.497041420118343),
  118. (3,0.290526315789474),
  119. (4,0.697263157894737),
  120. (5,0.998792270531401),
  121. (6,0.998652173913044),
  122. (7,0.0596296296296296),
  123. (8,0.0340740740740741),
  124. (9,0.1725),
  125. (10,0.1725),
  126. (11,0.274722222222222),
  127. (12,0.284305555555556),
  128. (13,1),
  129. (14,0.997944444444444),
  130. (15,1.0009756097561),
  131. (16,0.780165289256198),
  132. (17,0.219834710743802),
  133. (18,0.95),
  134. (19,0.0496252927400468),
  135. (20,0.171296296296296),
  136. (21,0.134259259259259),
  137. (22,0.101851851851852),
  138. (23,0.240740740740741),
  139. (24,0.203703703703704),
  140. (25,0.148148148148148),
  141. (26,0.443916083916084),
  142. (27,0.556503496503497),
  143. (28,0.997846153846154),
  144. (29,1),
  145. (30,0.5),
  146. (31,0.508474576271186),
  147. (32,0.997933884297521),
  148. (33,1),
  149. (34,0.47289156626506),
  150. (35,0.530963855421687),
  151. (36,0.71875),
  152. (37,0.277916666666667),
  153. (38,0.397849462365591),
  154. (39,0.602150537634409),
  155. (40,0.999881305637982),
  156. (41,1.00363636363636),
  157. (42,0.999279869067103),
  158. (43,1.00031746031746),
  159. (44,1),
  160. (45,1.00216216216216),
  161. (46,1.0013023255814),
  162. (47,0.997846153846154),
  163. (48,0.999493670886076),
  164. (49,1.00106557377049),
  165. (50,1.00222222222222),
  166. (51,0.997974683544304),
  167. (52,0.779710144927536),
  168. (53,0.220289855072464),
  169. (54,0.99912),
  170. (55,0.998684210526316),
  171. (56,0.996),
  172. (57,1),
  173. (58,0.740677966101695),
  174. (91,0.144237288135593),
  175. (92,0.0935593220338983),
  176. (59,0.521348314606742),
  177. (60,0.478651685393258),
  178. (61,0.997846153846154),
  179. (62,0.998857142857143),
  180. (63,1),
  181. (64,0.9994),
  182. (65,0.571428571428571),
  183. (66,0.428571428571429),
  184. (67,0.99774647887324),
  185. (68,1.00135135135135),
  186. (69,1),
  187. (70,0.997795275590551),
  188. (71,0.999493670886076),
  189. (72,0.5544),
  190. (73,0.4455),
  191. (74,0.999894736842105),
  192. (75,1.00279069767442),
  193. (76,1),
  194. (77,0.5),
  195. (78,1),
  196. (79,1.00150485436893),
  197. (80,0.509090909090909),
  198. (81,0.496969696969697),
  199. (82,0.998780487804878),
  200. (83,1.0032),
  201. (84,1.00304347826087),
  202. (85,1.00236486486486),
  203. (86,0.998957264957265),
  204. (87,1.00040816326531),
  205. (88,1.00139737991266),
  206. (89,1.00363636363636),
  207. (90,1),
  208. ]
  209.  
  210. correction_name = [
  211. ("Alzonne","ALZONNE"),
  212. ("Mr_Arsac","ARSAC"),
  213. ("Bar_Alain","BARGERIE ALAIN"),
  214. ("Bar_Fabrice","BARGERIE FABRICE"),
  215. ("Bossu","BOSSU"),
  216. ("Bourret","BOURRET"),
  217. ("Brosse","BROSSE"),
  218. ("Brunel","BRUNEL"),
  219. ("Buathier","BUATHIER"),
  220. ("Bulteau","BULTEAU"),
  221. ("Cave_Canet","CAVE CANET D'AUDE"),
  222. ("Chabas","CHABAS"),
  223. ("Champion","CHAMPION"),
  224. ("Chassagnoux","CHASSAGNOUX"),
  225. ("Chenou","CHENOU"),
  226. ("Chocian","CHOCIAN"),
  227. ("CLAIR_Jean-Marie_and_FOURNEL_Laurence","CLAIR"),
  228. ("Croix_Rouge","CROIX ROUGE"),
  229. ("CROUZILLES","CROUZILLES"),
  230. ("Cruscades","CRUSCADES"),
  231. ("Dezillie","DEZILLIE"),
  232. ("DUC_Amandine","DUC"),
  233. ("Dumas","DUMAS"),
  234. ("EXAPAC","EXAPAQ"),
  235. ("Fenaison","FENAISONS"),
  236. ("GAYET","GAYET"),
  237. ("Gougne_Alain","GOUGNE ALAIN"),
  238. ("Gougne_Delphine","GOUGNE DELPHINE"),
  239. ("GRAVIER","GRAVIER"),
  240. ("Hedde","HEDDE"),
  241. ("Hemar","HEMAR"),
  242. ("KEISER","KEISER"),
  243. ("La_florentaise","LA FLORENTAISE"),
  244. ("GAEC_La_Tendrerie","LA TENDRERIE"),
  245. ("LABEILLE_Rgine","LABEILLE"),
  246. ("LAFON","LAFON"),
  247. ("Lapalud","LAPALUD"),
  248. ("Ma_Nouvelle_Mutuelle","MA NOUVELLE MUTUELLE"),
  249. ("Vitrolles","MABEMA"),
  250. ("Meallares","MEALLARES"),
  251. ("Navy_Service","NAVY SERVICE"),
  252. ("OTECH","OTECH"),
  253. ("PEYRE","PEYRE"),
  254. ("Pinguet","PINGUET"),
  255. ("EARL_du_pont","PONT DE RHODES BOISSIERE"),
  256. ("GAEC_DE_REDONDET","REDONDET ISSALY (CROIX DE BOURLAC)"),
  257. ("Relais_Vert","RELAIS VERT"),
  258. ("Renard","RENARD"),
  259. ("Reynal","REYNAL"),
  260. ("Roux_Claude","ROUX CLAUDE"),
  261. ("Roux_Jeremy","ROUX JEREMY"),
  262. ("Bousquet","SERRE MONTOLIEU BOUSQUET (LES BRETOUS)"),
  263. ("Sud_Cereales","SUD CEREALES"),
  264. ("Sunsteel","SUNSTEEL"),
  265. ("T1271","T1271 (SAINT MARTIN DE LENNE)"),
  266. ("T1274","T1274 (REQUISTA)"),
  267. ("T3203-Courties","T3203 (COURTIES)"),
  268. ("T3227-Terraube","T3227 (TERRAUBE)"),
  269. ("T4602","T4602 (MAYRINHAC)"),
  270. ("T4604","T4604 (LAVERGNE)"),
  271. ("T8107-Montredon","T8107 (MONTREDON)"),
  272. ("T8208","T8208 (BEAUMONT DE LOMAGNE)"),
  273. ("SCI_Tournecamp","TOUR DE CAMP"),
  274. ("Vergne","VERGNE"),
  275. ("Vialle","VIALLE"),
  276. ("Vidal","VIDAL")
  277. ]
  278.  
  279. coeff_auto = True
  280.  
  281. data_line = 50
  282.  
  283. url_elios ='ftp://ELIOS:7K96Egg@ftp.geomodel.eu/CLIMDATA/'
  284.  
  285. ## url_eleco ='ftp://ELECO:msZ6QyH@ftp.geomodel.eu/CLIMDATA/'
  286.  
  287. GTI = 4
  288. TEMP = 8
  289. site_line = 4
  290.  
  291. recuperation_mensuelle = False
  292. recuperation_jour = True
  293.  
  294. correction_jour = False
  295.  
  296. datemensuelle = 201708
  297. datejournaliere = 20171204
  298.  
  299. ## CONNECTION
  300.  
  301. SERVERNAME = 'elecosql.database.windows.net'
  302. DATABASE_NAME = 'REC_ActiviteEleco'
  303. USER = 'eleco_sql_user'
  304. PASSWORD = 'dh6çù&az'
  305.  
  306. REQUEST_COEFFS = 'SELECT [ID_Solargis],[Coeff] FROM [dbo].[Coeffs] ORDER BY Site'
  307.  
  308. ###################################################################
  309.  
  310. url1 = url_elios # à implémenter en radio
  311.  
  312. start = time.time()
  313.  
  314.  
  315. conn = pyodbc.connect('DRIVER={SQL Server};SERVER='+SERVERNAME+';DATABASE='+DATABASE_NAME+';UID='+USER+';PWD='+PASSWORD)
  316. cursor = conn.cursor()
  317.  
  318. if (coeff_auto == True):
  319. coeff_pond = []
  320. cursor.execute(REQUEST_COEFFS)
  321. for row in cursor.fetchall():
  322. coeff_pond.append(row)
  323.  
  324.  
  325.  
  326. if (recuperation_mensuelle == True): # recuperation mensuelle
  327. recuperation_jour = False
  328. url2 = str(datemensuelle)+'01_'+ str(datemensuelle)+'31.csv'
  329. print("Début de l'importation mensuelle :")
  330.  
  331. elif(recuperation_jour == True):
  332. recuperation_mensuelle = False
  333. url2 = str(datejournaliere)+'.csv'
  334. print("Début de l'importation journalière :")
  335.  
  336. tableau_data = []
  337. irr_ponderee = 0
  338. coeff = 0
  339. new_name =''
  340.  
  341. for x,n in enumerate(site_code):
  342.  
  343. url = url1 + n + url2
  344.  
  345. irr_site = 0
  346. rows = 0
  347. temp = 0
  348.  
  349. id_pan_solargis = n.replace('SolarGIS_min15_','').split('_',1)[0]
  350.  
  351.  
  352. name_site = n.replace('SolarGIS_min15_','').split('_',1)[1]
  353. name_site = re.sub('_[0-9]+', '', name_site)
  354. name_site = re.sub('_$', '', name_site)
  355.  
  356. if(x+1 < len(site_code)):
  357. name_site_next = site_code[x+1].replace('SolarGIS_min15_','').split('_',1)[1]
  358. name_site_next = re.sub('_[0-9]+_', '', name_site_next)
  359. name_site_next = re.sub('_$', '', name_site_next)
  360.  
  361. for j in coeff_pond:
  362. if(str(id_pan_solargis) == str(j[0])):
  363. coeff = j[1]
  364.  
  365. # Sécurité dans le cas ou les coefficients ne sont pas bons
  366. if (coeff == 0):
  367. print('Erreur : Les coefficients sont erronés')
  368.  
  369. ftpstream = urllib.request.urlopen(url)
  370. csvfile = csv.reader(codecs.iterdecode(ftpstream, 'utf-8'), delimiter='\t', dialect='excel')
  371.  
  372. for i,line in enumerate(csvfile):
  373.  
  374. if(i >=data_line):
  375. rows=rows+1
  376. irr_str = line[0].split(';')[GTI]
  377. irr_site = float(irr_site + int(irr_str) / 4000)
  378.  
  379. temp_str = line[0].split(';')[TEMP]
  380. temp = float(temp + float(temp_str))
  381.  
  382. if(name_site == name_site_next):
  383. irr_ponderee = irr_ponderee + irr_site*float(coeff)
  384.  
  385. else:
  386. irr_ponderee = irr_site
  387.  
  388.  
  389. temp = temp / rows
  390.  
  391. if((name_site != name_site_next) | (x+1 == len(site_code))):
  392.  
  393. for k in correction_name:
  394. if(str(name_site) == str(k[0])):
  395. new_name = k[1]
  396.  
  397. if(recuperation_jour == True):
  398. date_sql = datetime.strptime(str(datejournaliere), '%Y%m%d').strftime('%Y-%m-%d')
  399.  
  400.  
  401. elif(recuperation_mensuelle == True):
  402. date_sql = datetime.strptime(str(datemensuelle)+'01', '%Y%m%d').strftime('%Y-%m-%d')
  403.  
  404.  
  405. tableau_data.append([date_sql,new_name,irr_ponderee])
  406. print(date_sql,new_name,irr_ponderee,temp,sep=' ')
  407.  
  408. irr_ponderee= 0
  409.  
  410.  
  411. cursor.executemany("INSERT INTO [dbo].[IrradiationExecutedTEST] ([DateMensuelle],[Site], [IR]) VALUES (?,?,?)",tableau_data)
  412. cursor.commit()
  413.  
  414.  
  415. end = time.time()
  416.  
  417. print ('Importation effectuée en :')
  418. print (str(end - start)+ ' secondes')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement