Conteúdo da pasta do subconjunto ArcPy


8

Eu tenho cerca de 1500 arquivos .txt em uma pasta chamada 3410001ne => 3809962sw. Preciso agrupar cerca de 470 desses arquivos para processar com um script Python. Abaixo está a seção de código anterior ao meu loop for, que lista todos os arquivos em uma pasta:

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

Como subconjunto do conteúdo da pasta para incluir 470 de 1500 arquivos, variando de 3609902sw => 3610032sw?

Respostas:


8

Você pode pular usando ap.Listfiles todos juntos e usar um loop for com 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...

7

Para iniciantes, você pode incluir sw em seu extrato curinga (* sw.txt), o que presumivelmente reduziria substancialmente o número de registros retornados (supondo que você tenha ne, nw, se, etc.).

Segundo, agora que você está trabalhando com um subconjunto de arquivos, use uma declaração condicional para definir os arquivos de acordo com as suas necessidades exatas.

Pseudo-código:

  1. Definir área de trabalho (diretório)
  2. Loop for com sua var txt_list
  3. Crie uma variável que armazene os 7 primeiros caracteres no nome do arquivo (por exemplo, theNumbers = theFile [: 6])
  4. Converta a variável como um número inteiro: int (theNumbers)
  5. Teste (condicional) se sua variável é maior ou igual a 3609902 e menor ou igual a 3610032
  6. Se SIM , faça o que precisar ser feito

6

Com base na explicação de Roy:

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

3

você pode fazer isso desta maneira:

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 ajude você ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.