Más

Iterar a través de carpetas dentro de carpetas

Iterar a través de carpetas dentro de carpetas


Tengo problemas para crear un modelo que iterará a través de carpetas y subcarpetas. Quiero poder tener la carpeta de nivel superior como parámetro y luego hacer que el código pase por cada una de las subcarpetas y complete una acción.

Tengo un código de trabajo para la acción que estoy buscando completar y puedo crear una iteración para pasar por una carpeta, pero quiero poder pasar por 18 carpetas y ejecutar mi script en cada .mxd dentro de cada carpeta.

Este es el modelo que se ejecuta dentro de una carpeta.

Quiero que esto se ejecute en las 18 carpetas que tengo.

¿Algunas ideas? Puedo ejecutar esto como modelo o como script.


A continuación, se explica cómo encontrar todos los mxds en un árbol de directorios usando el módulo os:

import os for root, dirs, files in os.walk ('C: / junk'): for file in files: if os.path.splitext (file) [1] == '.mxd': print 'Es un MXD! '

VBA recorre todos los archivos de una carpeta mediante el objeto del sistema de archivos (FSO) y la función Dir () incorporada. VBA para cada archivo en la carpeta macro nos ayuda a recorrer todos los archivos de un directorio. En este tutorial recorremos una carpeta y enumeramos todos los archivos disponibles en una carpeta utilizando el método de enlace temprano y tardío de FSO y la función Dir ().

Hay dos enfoques para utilizar la biblioteca de objetos FSO.
1. Enlace anticipado
2. Encuadernación tardía

Enumere todos los archivos en una carpeta usando la función Dir () en Excel VBA

Veamos la macro de ejemplo en VBA. Enumere todos los archivos en una carpeta usando la función Dir (). Como resultado, muestra la salida en la ventana inmediata.

Recorra todos los archivos en una carpeta usando FSO & # 8211 Early Binding en Excel VBA

Veamos un ejemplo en VBA Recorre todos los archivos de una carpeta utilizando FSO & # 8211 Early Binding.

Nota: Si obtiene algún error al ejecutar la macro anterior, siga las instrucciones especificadas a continuación para agregar la referencia de la biblioteca FSO.

Agregar referencia de enlace anticipado

Aquí están las instrucciones para agregar una referencia de encuadernación anticipada.

  • Vaya a Herramientas desde el menú VBE.
  • Haga clic en las referencias de las opciones disponibles.
  • Compruebe el tiempo de ejecución de secuencias de comandos de Microsoft.
  • Haga clic en Aceptar.
  • Encuentre la captura de pantalla a continuación para su referencia.

Enumere todos los archivos en una carpeta usando FSO & # 8211 Late Binding en Excel VBA

Veamos un ejemplo en VBA Loop a través de todos los archivos en una carpeta usando FSO & # 8211 Late Binding.

Producción: Aquí está la captura de pantalla de salida del procedimiento de código de macro anterior.


Alternativas

Un comando alternativo para enumerar carpetas y subcarpetas que coinciden con un comodín es DIR:
C: & gt dir / b / s / a: d & quotC: Trabajo informes * & quot

Para recorrer cada carpeta de manera programática, podemos envolver eso en un comando FOR / F:
C: & gt para / f & quottokens = * & quot% G en ('dir / b / s / a: d & quotC: Trabajo informes * & quot') do echo Encontrado% G

o lo mismo en un archivo por lotes, con el% duplicado:
for / f & quottokens = * & quot %% G in ('dir / b / s / a: d & quotC: Work reports * & quot') do echo Found %% G


¿Cómo modifico esto para adaptarlo a mis necesidades específicas?

Es probable que esta publicación no le haya dado la respuesta exacta que estaba buscando. Todos tenemos situaciones diferentes y es imposible tener en cuenta cada necesidad particular que uno pueda tener. Por eso quiero compartir contigo: ¡Mi guía para encontrar la solución a sus problemas RÁPIDAMENTE! En este artículo, explico las mejores estrategias que se me han ocurrido a lo largo de los años para obtener respuestas rápidas a problemas complejos en Excel, PowerPoint, VBA, Tu dilo!

Te recomiendo encarecidamente que compruebes esta guía antes de preguntarme a mí oa cualquier otra persona en la sección de comentarios para resolver su problema específico. Puedo garantizar que 9 de cada 10 veces, una de mis estrategias le dará la (s) respuesta (s) que necesita más rápido de lo que me llevará responderle con una posible solución. Hago todo lo posible para ayudar a todos, pero a veces no tengo tiempo para responder las preguntas de todos (¡parece que nunca hay suficientes horas en el día!).

¡Te deseo la mejor de las suertes y espero que este tutorial te lleve en la dirección correcta!


Cartografía interactiva (GIS)

El Sistema de Información Geográfica del Condado de Warren, o GIS, es una aplicación de mapeo interactivo que organiza capas de información y las muestra en una base de datos con capacidad de búsqueda. Los usuarios pueden buscar por nombre del propietario, dirección de la propiedad o número de identificación de la parcela. La siguiente información está disponible públicamente a través del SIG del condado de Warren:

  • Nombre actual del propietario de la propiedad
  • Valor total de la propiedad (terreno más mejoras)
  • Historia de la construcción
  • Designación de zonificación
  • Superficie en acres
  • Distrito Magisterial
  • Zonificación del distrito escolar

Para visitar el sitio web de GIS del condado, haga clic aquí: www.warrengis.org

También hay una variedad de mapas superpuestos disponibles, que incluyen, entre otros: distritos electorales, distritos sanitarios, sitios de eliminación de desechos, ubicaciones de varios servicios de emergencia y edificios gubernamentales, ubicaciones de las escuelas del condado de Warren, zonas de inundación y muchos más.

Un recurso adicional disponible para los residentes es la colección en línea de aplicaciones de mapas interactivos existentes, que son una excelente manera de ubicar los recursos del condado y obtener conocimiento de los planes, proyectos y oportunidades en la comunidad. Cada aplicación ofrece funciones adicionales, como enlaces directos a sitios web, fotos y documentos mediante la interacción con las funciones que se muestran en los mapas. Los siguientes mapas se incluyen actualmente en esta colección:

  • Guía de recreación del condado de Warren (presenta parques y embarcaderos dentro del condado, así como áreas recreativas y senderos dentro de las 30 millas del centro geográfico del condado)
  • Mapa de estado de reevaluación general de 2019
  • Mapa "Encuentra tu escuela"
  • Mapa de ubicaciones de distritos sanitarios

Para acceder a esta colección de mapas interactivos, haga clic en la imagen a continuación.

Para obtener más información sobre los sitios GIS del condado de Warren, comuníquese con la Oficina GIS a través del Departamento de Planificación y Zonificación al (540) 636-3354.


La forma alternativa

Microsoft ofreció una solución propia en este antiguo artículo, que proporciona un enfoque iterativo interesante.

He modificado ligeramente el método anterior para incluir también archivos inmediatamente dentro del directorio principal. La solución de Microsoft & # 8217s actualmente no & # 8217t hace esto

El siguiente código agrega todas las rutas de archivo a una lista. Si desea hacer otra cosa, debe cambiar lo que sucede dentro de DoAction (). Es posible que también desee darle a DoAction un nombre más sensato, dependiendo de cuál sea su acción.


Cómo: enumerar directorios y archivos

Numerosas colecciones proporcionan un mejor rendimiento que las matrices cuando trabaja con grandes colecciones de directorios y archivos. Para enumerar directorios y archivos, utilice métodos que devuelvan una colección enumerable de nombres de archivos o directorios, o sus objetos DirectoryInfo, FileInfo o FileSystemInfo.

Si desea buscar y devolver solo los nombres de directorios o archivos, utilice los métodos de enumeración de la clase Directory. Si desea buscar y devolver otras propiedades de directorios o archivos, use las clases DirectoryInfo y FileSystemInfo.

Puede usar colecciones enumerables de estos métodos como el parámetro IEnumerable & ltT & gt para constructores de clases de colección como List & ltT & gt.

La siguiente tabla resume los métodos que devuelven colecciones enumerables de archivos y directorios:

Para buscar y regresar Método de uso
Nombres de directorio Directory.EnumerateDirectories
Información de directorio (DirectoryInfo) DirectoryInfo.EnumerateDirectories
Nombres de archivo Directory.EnumerateFiles
Información de archivo (FileInfo) DirectoryInfo.EnumerateFiles
Nombres de entrada del sistema de archivos Directory.EnumerateFileSystemEntries
Información de entrada del sistema de archivos (FileSystemInfo) DirectoryInfo.EnumerateFileSystemInfos
Nombres de archivos y directorios Directory.EnumerateFileSystemEntries

Aunque puede enumerar inmediatamente todos los archivos en los subdirectorios de un directorio principal utilizando la opción AllDirectories de la enumeración opcional SearchOption, los errores UnauthorizedAccessException pueden hacer que la enumeración sea incompleta. Puede detectar estas excepciones enumerando primero directorios y luego enumerando archivos.


Observaciones

Un bucle de archivos es útil cuando desea operar en una colección de archivos y / o carpetas, uno a la vez.

Se recuperan todos los archivos coincidentes, incluidos los archivos ocultos. Por el contrario, las funciones del sistema operativo, como el comando DIR, omiten los archivos ocultos de forma predeterminada. Para evitar procesar archivos ocultos, del sistema y / o de solo lectura, use algo como lo siguiente dentro del ciclo:

Para recuperar las rutas relativas de los archivos en lugar de las rutas absolutas durante una búsqueda recursiva, use SetWorkingDir para cambiar a la carpeta base antes del bucle y luego omita la ruta del bucle (por ejemplo, Bucle, *. *, 0, 1). Eso hará que A_LoopFileFullPath contenga la ruta del archivo en relación con la carpeta base.

Un bucle de archivos puede interrumpirse si crea o cambia el nombre de archivos o carpetas dentro de su propio ámbito. Por ejemplo, si cambia el nombre de los archivos a través de FileMove u otros medios, cada uno de esos archivos se puede encontrar dos veces: una vez como su nombre anterior y nuevamente como su nuevo nombre. Para solucionar este problema, cambie el nombre de los archivos solo después de crear una lista de ellos. Por ejemplo:

Los archivos en un sistema de archivos NTFS probablemente siempre se recuperan en orden alfabético. Los archivos de otros sistemas de archivos se recuperan sin ningún orden en particular. Para asegurar un orden en particular, use el comando Ordenar como se muestra en la sección de Ejemplos a continuación.

Los archivos y carpetas con un nombre de ruta completo de más de 259 caracteres se omiten como si no existieran. Estos archivos son raros porque normalmente el sistema operativo no permite su creación.

Consulte Bucle para obtener información sobre Bloques, Romper, Continuar y la variable A_Index (que existe en todos los tipos de bucle).


Cuando procesa cadenas de ruta especificadas por el usuario, también debe manejar excepciones para las siguientes condiciones:

El nombre del archivo tiene un formato incorrecto. Por ejemplo, contiene caracteres no válidos o solo espacios en blanco.

El nombre del archivo es más largo que la longitud máxima definida por el sistema.

El nombre del archivo contiene dos puntos (:).

Si la aplicación no tiene permisos suficientes para leer el archivo especificado, el método Exists devuelve falso independientemente de si existe una ruta, el método no genera una excepción.


1 respuesta 1

No estoy seguro de lo que desea tener en estos archivos y lo que desea obtener, pero suponiendo que tenga un archivo principal book.tex en el directorio "Bellankonda", y los archivos como chap_page_015 son solo trozos del cuerpo del texto (no hay documentos LaTeX totalmente compilables) y desea obtener un PDF único que combine todos estos fragmentos, entonces el archivo del libro podría ser algo como esto:

Si los subarchivos son algo como capítulos enteros, que deben comenzar y terminar las páginas nuevas, puede ser que desee usar include en lugar de input. Consulte ¿Cuándo debo usar input frente a include?

Si los documentos secundarios son archivos LaTeX completos con preámbulo (comenzando con documentclass y terminando con end puede usar el mismo archivo put incluyendo en el preample los paquetes standalone, o docmute, o subfiles (en este caso use subfiles en lugar de input). Los documentos secundarios deben ser todos de la misma clase; en otro caso, puede probar la clase combinada, pero generalmente esto generalmente significa buscar problemas. Otra opción en este caso podría ser producir archivos PDF de páginas individuales y combinarlos con el paquete pdfpages.

Como el comentario de Aku pide un bucle para escribir automáticamente los comandos input, una solución podría ser el comando foreach. El siguiente código es un ejemplo simple donde el documento principal incluye de page1.tex a page5.tex usando este comando: