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?

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...

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

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]

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 ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.