Python - Busqueda de archivos por extensiones

 
Vista:

Busqueda de archivos por extensiones

Publicado por Susana Iraiís Delgado Rodrígue (1 intervención) el 10/11/2010 19:23:48
Buen día comunidad!

Estoy trabajando en un crawler para una pc, se trata de buscar archivos con extension .shp y obtener algunas de sus características, aqui les muestro el código.

import os, time, socket, pylab
from xlwt import Workbook
from osgeo import ogr,gdal,osr
from dbf import *

#Registra todos los dfivers de GDAL
gdal.AllRegister()
#Se crea una lista
file_list = []
#Crear variable para buscar dentro de carpetas en el sistema
folders = None
#Se asigna el directorio raiz dinde se van buscar los archivos, se hace un recorrido en la raiz
for root, folders, files in os.walk( "C:\\" ):
#Agregar a la lista los elementos que traiga os.path.join, los aechivos que terminen en extension .shp
file_list.extend(os.path.join(root,fi) for fi in files if fi.endswith(".shp"))
#Abrir nuevo libro de Excel
wrkbk = Workbook()
#Agregar una hoja al libro de Excel
wksht = wrkbk.add_sheet('shp')
#Escribir el nombre de las columnas en la hoja de Excel; row(0) se refiere a la posicion 0 de las filas
# write(0,'ruta'); se refiere a la posicion de las columnas, nombre de la columna
wksht.row(0).write(0,'ruta')
wksht.row(0).write(1,'archivo')
wksht.row(0).write(2,'x_min')
wksht.row(0).write(3,'x_max')
wksht.row(0).write(4,'y_min')
wksht.row(0).write(5,'y_max')
wksht.row(0).write(6,'geometria')
wksht.row(0).write(7,'num_elem')
wksht.row(0).write(8,'proyeccion')
wksht.row(0).write(9,'prj')
wksht.row(0).write(10,'estructura bd')
wksht.row(0).write(11,'fecha_modificacion')
wksht.row(0).write(12,'maquina_host')
wksht.row(0).write(13,'usuario')

#Recorrido que se hace para evitar que se sobreescriba en la posicion 0,0, dice que inicie en la fila 1
for row, filepath in enumerate(file_list, start=1):
#Llenar lista con las rutas de los archivos
wksht.row(row).write(0, filepath)
#Partir la ruta dek archivo en dos, ruta y nombre del archivo
(ruta, filename) = os.path.split(filepath)
#Escribir el nombre del archivo
wksht.row(row).write(1, filename)
# Obtener coordenadas x/y
#Abrir el shape
shapeData = ogr.Open(filepath)
#Obtener la capa del shape
layer = shapeData.GetLayer()
#Asignar a feature las caracteristicas de la capa
feature = layer.GetNextFeature()
#Asignar variables para obtener los extents del shp
x_y = layer.GetExtent()
#Asignar las coofdendas de acuerdo a la posicion del extent
#x_min
wksht.row(row).write(2, x_y[0])
#x_max
wksht.row(row).write(3, x_y[1])
#y_min
wksht.row(row).write(4, x_y[2])
#y_max
wksht.row(row).write(5, x_y[3])
#Escribir eltipo de geometria del shp. 1=Point, 2=LineString, 3=Polygon
defn = layer.GetLayerDefn()
wksht.row(row).write(6, defn.GetGeomType())
#Comenzar el featurecount()
wksht.row(row).write(7, layer.GetFeatureCount())
#Verificar si el shp tiene asignado un prj
n = os.path.splitext(filename)
p = n[0]+'.prj'
if os.path.lexists(p):
#Si existe, asignar 1
wksht.row(row).write(9, 1)

else:
#Sino asignar 0
wksht.row(row).write(9, 0)

#Obtner el nombre del host del archivo
wksht.row(row).write(12, socket.gethostname())

if os.path.lexists(p):
prj_text = open(p, 'r').read()
wksht.row(row).write(8,prj_text)
else:
wksht.row(row).write(8, 'Sin prj, no se puede determinar la proyeccion')


#Obtener la estructura de la base de datos
#Escribir el nombre para el archivo donde se guardara la base de datos
t = n[0]+'_bd.txt'
#Asignar varoable para buscar dbf
d = n[0]+'.dbf'
#Si existe el dbf, obtener la base de adtos
if os.path.lexists(d):
#Abrir el txt donde se escribira la base en modo de escritura
a = open (t,"w+")
#Leer dbf
dbf = Dbf(d,new=False)

#Recorrer los campos del dbf
for fldName in dbf.fieldDefs:
#Escribir el nombre del campo
a.write(fldName.name)
#Escribir separador
a.write(" || ")
#Escribir el tipo de dato
a.write(fldName.typeCode)
#Dar salto de linea
a.write("\n")
# Cerrar el dbf
dbf.close()
#Cerrar el txt
a.close()
#Escribir la ruta donde se guardo el txt con la base de datos
wksht.row(row).write(10, t)
#Si no tiene dbf en la pantalla se mostrara el nombre del shp sin dbf
else:
print "El archivo " +n[0]+".shp" " no tiene dbf"
wksht.row(row).write(10, "Sin bd")


#Obtener fecha de modificacion
t = time.strftime("%m/%d/%Y %I:%M:%S %p",time.localtime(os.path.getmtime(filepath)))
wksht.row(row).write(11, t)
#Obtener usuario
wksht.row(row).write(13,os.environ.get("USERNAME"))

#Guardar libro de Excel
wrkbk.save('shp.xls')


#Mensajes para mostar en la consola
SEARCH_PATH = os.getcwd()
TARGET_FILE = os.path.realpath('shp.xls')
print "Buscando en", SEARCH_PATH, "and writing to", TARGET_FILE
print "Encontrando archivos..."
print "Escribiendo archivo de Excel..."
print "Listo."

El problema radica en las validaciones hechas con el if, debido a que me crea un Excel que mr da informaciòn incorrecta, respecto a la existencia de los arhcivos dbf y prj, pero dichis archivos si existen, mis sentencias if, están bien ubicadas o se hacen ruido?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder