##// END OF EJS Templates
Cambios realiazados en busqueda de datos online y offline, en el metodo JRODataReader.setup se han definido los parametros: startDate, endDate, startTime, endTime. Todos estos cambios fueron realizado en el Archivo JRODataIO.py
Daniel Valdez -
r117:aee4019df37c
parent child
Show More
@@ -288,7 +288,205 class JRODataReader(JRODataIO):
288 288 raise ValueError, "This method has not been implemented"
289 289
290 290 # def setup(self, dataOutObj=None, path=None, startDateTime=None, endDateTime=None, set=0, expLabel = "", ext = None, online = 0):
291 def setup(self, dataOutObj=None, path=None, startDateTime=None, endDateTime=None, set=0, expLabel = "", ext = None, online = 0):
291
292 def __searchFilesOnLine(self, path, expLabel = "", ext = None, startDate=None, endDate=None, startTime=None, endTime=None):
293 """
294 Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y
295 devuelve el archivo encontrado ademas de otros datos.
296
297 Input:
298 path : carpeta donde estan contenidos los files que contiene data
299
300 startDate : Fecha inicial. Rechaza todos los directorios donde
301 file end time < startDate (obejto datetime.date)
302
303 endDate : Fecha final. Rechaza todos los directorios donde
304 file start time > endDate (obejto datetime.date)
305
306 startTime : Tiempo inicial. Rechaza todos los archivos donde
307 file end time < startTime (obejto datetime.time)
308
309 endTime : Tiempo final. Rechaza todos los archivos donde
310 file start time > endTime (obejto datetime.time)
311
312 ext : extension de los files
313
314 Return:
315 directory : eL directorio donde esta el file encontrado
316 filename : el ultimo file de una determinada carpeta
317 year : el anho
318 doy : el numero de dia del anho
319 set : el set del archivo
320
321
322 """
323 dirList = []
324 pathList = []
325 directory = None
326
327 #Filtra solo los directorios
328 for thisPath in os.listdir(path):
329 if os.path.isdir(os.path.join(path, thisPath)):
330 dirList.append(thisPath)
331
332 if not(dirList):
333 return None, None, None, None, None
334
335 dirList = sorted( dirList, key=str.lower )
336
337 if startDate:
338 startDateTime = datetime.datetime.combine(startDate, startTime)
339 thisDateTime = startDateTime
340 if endDate == None: endDateTime = startDateTime
341 else: endDateTime = datetime.datetime.combine(endDate, endTime)
342
343 while(thisDateTime <= endDateTime):
344 year = thisDateTime.timetuple().tm_year
345 doy = thisDateTime.timetuple().tm_yday
346
347 match = fnmatch.filter(dirList, '?' + '%4.4d%3.3d' % (year,doy))
348 if len(match) == 0:
349 thisDateTime += datetime.timedelta(1)
350 continue
351
352 pathList.append(os.path.join(path,match[0], expLabel))
353 thisDateTime += datetime.timedelta(1)
354
355 if not(pathList):
356 print "\tNo files in range: %s - %s" %(startDateTime.ctime(), endDateTime.ctime())
357 return None, None, None, None, None
358
359 directory = pathList[0]
360
361 else:
362 directory = dirList[-1]
363 directory = os.path.join(path,directory)
364
365 filename = getlastFileFromPath(directory, ext)
366
367 if not(filename):
368 return None, None, None, None, None
369
370 if not(self.__verifyFile(os.path.join(directory, filename))):
371 return None, None, None, None, None
372
373 year = int( filename[1:5] )
374 doy = int( filename[5:8] )
375 set = int( filename[8:11] )
376
377 return directory, filename, year, doy, set
378
379
380 def __searchFilesOffLine(self, path, startDate, endDate, startTime=datetime.time(0,0,0), endTime=datetime.time(23,59,59),set=None, expLabel = "", ext = ".r"):
381 """
382 Realiza una busqueda de los archivos que coincidan con los parametros
383 especificados y se encuentren ubicados en el path indicado. Para realizar una busqueda
384 correcta la estructura de directorios debe ser la siguiente:
385
386 ...path/D[yyyy][ddd]/expLabel/D[yyyy][ddd][sss].ext
387
388 [yyyy]: anio
389 [ddd] : dia del anio
390 [sss] : set del archivo
391
392 Inputs:
393 path : Directorio de datos donde se realizara la busqueda. Todos los
394 ficheros que concidan con el criterio de busqueda seran
395 almacenados en una lista y luego retornados.
396 startDate : Fecha inicial. Rechaza todos los directorios donde
397 file end time < startDate (obejto datetime.date)
398
399 endDate : Fecha final. Rechaza todos los directorios donde
400 file start time > endDate (obejto datetime.date)
401
402 startTime : Tiempo inicial. Rechaza todos los archivos donde
403 file end time < startTime (obejto datetime.time)
404
405 endTime : Tiempo final. Rechaza todos los archivos donde
406 file start time > endTime (obejto datetime.time)
407
408 set : Set del primer archivo a leer. Por defecto None
409
410 expLabel : Nombre del subdirectorio de datos. Por defecto ""
411
412 ext : Extension de los archivos a leer. Por defecto .r
413
414 Return:
415
416 (pathList, filenameList)
417
418 pathList : Lista de directorios donde se encontraron archivos dentro
419 de los parametros especificados
420 filenameList : Lista de archivos (ruta completa) que coincidieron con los
421 parametros especificados.
422
423 Variables afectadas:
424
425 self.filenameList: Lista de archivos (ruta completa) que la clase utiliza
426 como fuente para leer los bloque de datos, si se termina
427 de leer todos los bloques de datos de un determinado
428 archivo se pasa al siguiente archivo de la lista.
429
430 Excepciones:
431
432 """
433
434 dirList = []
435 for thisPath in os.listdir(path):
436 if os.path.isdir(os.path.join(path,thisPath)):
437 dirList.append(thisPath)
438
439 if not(dirList):
440 return None, None
441
442 pathList = []
443 dateList = []
444
445 thisDate = startDate
446
447 while(thisDate <= endDate):
448 year = thisDate.timetuple().tm_year
449 doy = thisDate.timetuple().tm_yday
450
451 match = fnmatch.filter(dirList, '?' + '%4.4d%3.3d' % (year,doy))
452 if len(match) == 0:
453 thisDate += datetime.timedelta(1)
454 continue
455
456 pathList.append(os.path.join(path,match[0],expLabel))
457 dateList.append(thisDate)
458 thisDate += datetime.timedelta(1)
459
460 filenameList = []
461 for index in range(len(pathList)):
462
463 thisPath = pathList[index]
464 fileList = glob.glob1(thisPath, "*%s" %ext)
465 fileList.sort()
466
467 #Busqueda de datos en el rango de horas indicados
468 thisDate = dateList[index]
469 startDT = datetime.datetime.combine(thisDate, startTime)
470 endDT = datetime.datetime.combine(thisDate, endTime)
471
472 startUtSeconds = time.mktime(startDT.timetuple())
473 endUtSeconds = time.mktime(endDT.timetuple())
474
475 for file in fileList:
476
477 filename = os.path.join(thisPath,file)
478
479 if isThisFileinRange(filename, startUtSeconds, endUtSeconds):
480 filenameList.append(filename)
481
482 if not(filenameList):
483 return None, None
484
485 self.filenameList = filenameList
486
487 return pathList, filenameList
488
489 def setup(self, dataOutObj=None, path=None, startDate=None, endDate=None, startTime=datetime.time(0,0,0), endTime=datetime.time(23,59,59), set=0, expLabel = "", ext = None, online = 0):
292 490 """
293 491 setup configura los parametros de lectura de la clase DataReader.
294 492
@@ -302,11 +500,17 class JRODataReader(JRODataIO):
302 500
303 501 path/D[yyyy][ddd]/expLabel/P[yyyy][ddd][sss][ext]
304 502
305 startDateTime : Fecha inicial. Rechaza todos los archivos donde
306 file end time < startDatetime (obejto datetime.datetime)
503 startDate : Fecha inicial. Rechaza todos los directorios donde
504 file end time < startDate (obejto datetime.date)
505
506 endDate : Fecha final. Rechaza todos los directorios donde
507 file start time > endDate (obejto datetime.date)
307 508
308 endDateTime : Fecha final. Si no es None, rechaza todos los archivos donde
309 file end time < startDatetime (obejto datetime.datetime)
509 startTime : Tiempo inicial. Rechaza todos los archivos donde
510 file end time < startTime (obejto datetime.time)
511
512 endTime : Tiempo final. Rechaza todos los archivos donde
513 file start time > endTime (obejto datetime.time)
310 514
311 515 set : Set del primer archivo a leer. Por defecto None
312 516
@@ -321,8 +525,6 class JRODataReader(JRODataIO):
321 525 1 : Si encuentra files que cumplan con las condiciones dadas
322 526
323 527 Affected:
324 self.startUTCSeconds
325 self.endUTCSeconds
326 528 self.startYear
327 529 self.endYear
328 530 self.startDoy
@@ -343,14 +545,14 class JRODataReader(JRODataIO):
343 545 self.dataOutObj = dataOutObj
344 546
345 547 if online:
346 print "Searching files ..."
347 doypath, file, year, doy, set = self.__searchFilesOnLine(path, startDateTime, endDateTime, expLabel, ext)
548 print "Searching files in online mode..."
549 doypath, file, year, doy, set = self.__searchFilesOnLine(path=path, expLabel=expLabel, ext=exp)
348 550
349 551 if not(doypath):
350 552 for nTries in range( self.nTries ):
351 553 print '\tWaiting %0.2f sec for valid file in %s: try %02d ...' % (self.delay, path, nTries+1)
352 554 time.sleep( self.delay )
353 doypath, file, year, doy, set = self.__searchFilesOnLine(path, startDateTime, endDateTime, expLabel, ext)
555 doypath, file, year, doy, set = self.__searchFilesOnLine(path=path, expLabel=expLabel, ext=exp)
354 556 if doypath:
355 557 break
356 558
@@ -364,7 +566,8 class JRODataReader(JRODataIO):
364 566 self.path = path
365 567
366 568 else: # offline
367 pathList, filenameList = self.__searchFilesOffLine(path, startDateTime, endDateTime, set, expLabel, ext)
569 print "Searching files in offline mode..."
570 pathList, filenameList = self.__searchFilesOffLine(path, startDate, endDate, startTime, endTime, set, expLabel, ext)
368 571 if not(pathList):
369 572 print "No files in range: %s - %s" %(startDateTime.ctime(), endDateTime.ctime())
370 573 return None
@@ -379,23 +582,14 class JRODataReader(JRODataIO):
379 582 ext = ext.lower()
380 583
381 584 if not( self.setNextFile() ):
382 if (startDateTime != None) and (endDateTime != None):
383 print "No files in range: %s - %s" %(startDateTime.ctime(), endDateTime.ctime())
384 elif startDateTime != None:
385 print "No files in : %s" % startDateTime.ctime()
585 if (startDate != None) and (endDate != None):
586 print "No files in range: %s - %s" %(startDate.ctime(), endDate.ctime())
587 elif startDate != None:
588 print "No files in : %s" % startDate.ctime()
386 589 else:
387 590 print "No files"
388 591 return None
389 592
390 if startDateTime != None:
391 self.startUTCSeconds = time.mktime(startDateTime.timetuple())
392 self.startYear = startDateTime.timetuple().tm_year
393 self.startDoy = startDateTime.timetuple().tm_yday
394
395 if endDateTime != None:
396 self.endUTCSeconds = time.mktime(endDateTime.timetuple())
397 self.endYear = endDateTime.timetuple().tm_year
398 self.endDoy = endDateTime.timetuple().tm_yday
399 593 #call fillHeaderValues() - to Data Object
400 594
401 595 self.updateDataHeader()
@@ -733,170 +927,6 class JRODataReader(JRODataIO):
733 927 self.nReadBlocks = 0
734 928 return 1
735 929
736 def __searchFilesOnLine(self, path, startDateTime=None, endDateTime=None, expLabel = "", ext = None):
737 """
738 Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y
739 devuelve el archivo encontrado ademas de otros datos.
740
741 Input:
742 path : carpeta donde estan contenidos los files que contiene data
743 startDateTime : punto especifico en el tiempo del cual se requiere la data
744 ext : extension de los files
745
746 Return:
747 year : el anho
748 doy : el numero de dia del anho
749 set : el set del archivo
750 filename : el ultimo file de una determinada carpeta
751 directory : eL directorio donde esta el file encontrado
752 """
753 dirList = []
754 pathList = []
755 directory = None
756
757 for thisPath in os.listdir(path):
758 if os.path.isdir(os.path.join(path,thisPath)):
759 dirList.append(thisPath)
760
761 if not(dirList):
762 return None, None, None, None, None
763
764 dirList = sorted( dirList, key=str.lower )
765
766 if startDateTime:
767 thisDateTime = startDateTime
768 if endDateTime == None: endDateTime = startDateTime
769
770 while(thisDateTime <= endDateTime):
771 year = thisDateTime.timetuple().tm_year
772 doy = thisDateTime.timetuple().tm_yday
773
774 match = fnmatch.filter(dirList, '?' + '%4.4d%3.3d' % (year,doy))
775 if len(match) == 0:
776 thisDateTime += datetime.timedelta(1)
777 continue
778
779 pathList.append(os.path.join(path,match[0], expLabel))
780 thisDateTime += datetime.timedelta(1)
781
782 if not(pathList):
783 print "\tNo files in range: %s - %s" %(startDateTime.ctime(), endDateTime.ctime())
784 return None, None, None, None, None
785
786 directory = pathList[0]
787
788 else:
789 directory = dirList[-1]
790 directory = os.path.join(path,directory)
791
792 filename = getlastFileFromPath(directory, ext)
793
794 if not(filename):
795 return None, None, None, None, None
796
797 if not(self.__verifyFile(os.path.join(directory, filename))):
798 return None, None, None, None, None
799
800 year = int( filename[1:5] )
801 doy = int( filename[5:8] )
802 set = int( filename[8:11] )
803
804 return directory, filename, year, doy, set
805
806
807 def __searchFilesOffLine(self, path, startDateTime, endDateTime, set=None, expLabel = "", ext = ".r"):
808 """
809 Realiza una busqueda de los archivos que coincidan con los parametros
810 especificados y se encuentren ubicados en el path indicado. Para realizar una busqueda
811 correcta la estructura de directorios debe ser la siguiente:
812
813 ...path/D[yyyy][ddd]/expLabel/D[yyyy][ddd][sss].ext
814
815 [yyyy]: anio
816 [ddd] : dia del anio
817 [sss] : set del archivo
818
819 Inputs:
820 path : Directorio de datos donde se realizara la busqueda. Todos los
821 ficheros que concidan con el criterio de busqueda seran
822 almacenados en una lista y luego retornados.
823 startDateTime : Fecha inicial. Rechaza todos los archivos donde
824 file end time < startDateTime (obejto datetime.datetime)
825
826 endDateTime : Fecha final. Rechaza todos los archivos donde
827 file start time > endDateTime (obejto datetime.datetime)
828
829 set : Set del primer archivo a leer. Por defecto None
830
831 expLabel : Nombre del subdirectorio de datos. Por defecto ""
832
833 ext : Extension de los archivos a leer. Por defecto .r
834
835 Return:
836
837 (pathList, filenameList)
838
839 pathList : Lista de directorios donde se encontraron archivos dentro
840 de los parametros especificados
841 filenameList : Lista de archivos (ruta completa) que coincidieron con los
842 parametros especificados.
843
844 Variables afectadas:
845
846 self.filenameList: Lista de archivos (ruta completa) que la clase utiliza
847 como fuente para leer los bloque de datos, si se termina
848 de leer todos los bloques de datos de un determinado
849 archivo se pasa al siguiente archivo de la lista.
850
851 Excepciones:
852
853 """
854
855 print "Searching files ..."
856
857 dirList = []
858 for thisPath in os.listdir(path):
859 if os.path.isdir(os.path.join(path,thisPath)):
860 dirList.append(thisPath)
861
862 if not(dirList):
863 return None, None
864
865 pathList = []
866
867 thisDateTime = startDateTime
868
869 while(thisDateTime <= endDateTime):
870 year = thisDateTime.timetuple().tm_year
871 doy = thisDateTime.timetuple().tm_yday
872
873 match = fnmatch.filter(dirList, '?' + '%4.4d%3.3d' % (year,doy))
874 if len(match) == 0:
875 thisDateTime += datetime.timedelta(1)
876 continue
877
878 pathList.append(os.path.join(path,match[0],expLabel))
879 thisDateTime += datetime.timedelta(1)
880
881 startUtSeconds = time.mktime(startDateTime.timetuple())
882 endUtSeconds = time.mktime(endDateTime.timetuple())
883
884 filenameList = []
885 for thisPath in pathList:
886 fileList = glob.glob1(thisPath, "*%s" %ext)
887 fileList.sort()
888 for file in fileList:
889 filename = os.path.join(thisPath,file)
890 if isThisFileinRange(filename, startUtSeconds, endUtSeconds):
891 filenameList.append(filename)
892
893 if not(filenameList):
894 return None, None
895
896 self.filenameList = filenameList
897
898 return pathList, filenameList
899
900 930 def __verifyFile(self, filename, msgFlag=True):
901 931 """
902 932 Verifica que el filename tenga data valida, para ello leo el FirstHeader del file
General Comments 0
You need to be logged in to leave comments. Login now