Isi Subset Folder ArcPy


8

Saya memiliki sekitar 1500 file .txt dalam folder bernama 3410001ne => 3809962sw. Saya perlu mengatur sekitar 470 file ini untuk diproses dengan skrip Python. Di bawah ini adalah bagian kode sebelum loop saya untuk yang mencantumkan semua file dalam folder:

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

Bagaimana saya bisa mengatur ulang isi folder untuk menyertakan 470 dari 1500 file mulai dari 3609902sw => 3610032sw?

Jawaban:


8

Anda bisa melewati menggunakan ap.Listfile bersama-sama dan menggunakan for for loop dengan 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

Sebagai permulaan, Anda dapat memasukkan sw dalam pernyataan wildcard Anda (* sw.txt), yang mungkin akan mengurangi jumlah record Anda yang dikembalikan secara substansial (dengan asumsi Anda memiliki ne, nw, se, dll).

Kedua, sekarang Anda bekerja dengan subset file, gunakan pernyataan kondisional untuk menghapus file Anda sesuai kebutuhan Anda.

Kode semu:

  1. Setel ruang kerja (direktori)
  2. Untuk loop dengan var txt_list Anda
  3. Buat variabel yang menyimpan 7 karakter pertama dalam nama file (mis. TheNumbers = theFile [: 6])
  4. Keluarkan variabel sebagai integer: int (theNumbers)
  5. Tes (bersyarat) bahwa variabel Anda lebih besar dari atau sama dengan 3609902 dan kurang dari atau sama dengan 3610032
  6. Jika YA , lakukan apa yang perlu dilakukan

6

Berdasarkan penjelasan oleh Roy:

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

3

Anda bisa melakukannya dengan cara ini:

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]

Saya harap ini membantu Anda ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.