Inhalt des Teilmengenordners ArcPy

8

Ich habe ungefähr 1500 TXT-Dateien in einem Ordner mit dem Namen 3410001ne => 3809962sw. Ich muss ungefähr 470 dieser Dateien unterteilen, um sie mit einem Python-Skript zu verarbeiten. Unten ist der Codeabschnitt vor meiner for-Schleife, in dem alle Dateien in einem Ordner aufgelistet sind:

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

Wie kann ich den Ordnerinhalt so unterteilen, dass er 470 von 1500 Dateien enthält, die von 3609902sw => 3610032sw reichen?

Aaron
quelle

Antworten:

8

Sie können die Verwendung von ap.Listfiles alle zusammen überspringen und eine for-Schleife mit 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.
quelle
7

Für den Anfang könnten Sie sw in Ihre Platzhalteranweisung (* sw.txt) aufnehmen, was vermutlich die Anzahl der zurückgegebenen Datensätze erheblich reduzieren würde (vorausgesetzt, Sie haben ne, nw, se usw.).

Zweitens, jetzt, da Sie mit einer Teilmenge von Dateien arbeiten, verwenden Sie eine bedingte Anweisung, um Ihre Dateien genau auf Ihre Bedürfnisse abzustimmen.

Pseudocode:

  1. Arbeitsbereich festlegen (Verzeichnis)
  2. For-Schleife mit Ihrer txt_list var
  3. Erstellen Sie eine Variable, die die ersten 7 Zeichen im Dateinamen speichert (dh theNumbers = theFile [: 6]).
  4. Wandle die Variable als Ganzzahl um: int (theNumbers)
  5. Testen Sie (bedingt), ob Ihre Variable größer oder gleich 3609902 und kleiner oder gleich 3610032 ist
  6. Wenn JA , tun Sie, was auch immer getan werden muss
Roy
quelle
6

Basierend auf einer Erklärung von Roy:

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

Sie können es auf folgende Weise tun:

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]

ich hoffe es hilft dir ...

Aragon
quelle