Subconjunto Carpeta Contenido ArcPy

8

Tengo alrededor de 1500 archivos .txt dentro de una carpeta llamada 3410001ne => 3809962sw. Necesito subconjuntar alrededor de 470 de estos archivos para procesarlos con un script Python. A continuación se muestra la sección de código anterior a mi bucle for que enumera todos los archivos en una carpeta:

# Get the list of the text files to process
txt_list = arcpy.ListFiles("*.txt")

¿Cómo puedo configurar el contenido de la carpeta para incluir 470 de 1500 archivos que van desde 3609902sw => 3610032sw?

Aaron
fuente

Respuestas:

8

Puede omitir el uso de ap.Listfiles todos juntos y usar un bucle for con xrange ...

for rt in xrange(3609902,3610032):
quads = ["%snw.txt"%rt,"%sne.txt"%rt,"%ssw.txt"%rt,"%sse.txt"%rt]
print quads
for quad in quads:
    if ap.Exists(quad):
        # Do whatever...
Ed.
fuente
7

Para empezar, puede incluir sw en su declaración de comodín (* sw.txt), lo que presumiblemente reduciría su número de registros devueltos sustancialmente (suponiendo que tenga ne, nw, se, etc.).

Segundo, ahora que está trabajando con un subconjunto de archivos, use una declaración condicional para ajustar sus archivos a sus necesidades exactas.

Pseudocódigo:

  1. Establecer espacio de trabajo (directorio)
  2. Para bucle con su txt_list var
  3. Cree una variable que almacene los primeros 7 caracteres en el nombre del archivo (es decir, theNumbers = theFile [: 6])
  4. Convierta la variable como un entero: int (theNumbers)
  5. Pruebe (condicional) que su variable es mayor o igual que 3609902 y menor o igual que 3610032
  6. En caso afirmativo , haga lo que sea necesario hacer
Roy
fuente
6

Según la explicación de Roy:

toprocess = [p for p in [int(filename[0:7]) for filename in txt_list] if p>=3609902 and p<=3610032]
Matthew Snape
fuente
3

puedes hacerlo de esta manera:

import os
import random

yourMainFolder = r'C:/out'
range1 = 3609902sw
range2 = 3610032sw

newAry = []

for a in (int(range1[:-2]) - 1, int(range2[:-2] + 1)):
    newAry.append(str(a) + range2[-2:])

for dirname, dirnames, filenames in os.walk('yourMainFolder'):
    for subdirname in dirnames:
        path = os.path.join(dirname, subdirname)
        if str(subdirname) in newAry:
            files = [f for f in os.listdir(path) if f.endswith('.txt')]

#print files[random.randint(0, 469)]

for a in range(len(files)):
    if a < 470:
         print files[a]

Espero que te ayude...

Aragón
fuente