サブセットフォルダーの内容ArcPy


8

3410001ne => 3809962swという名前のフォルダ内に約1500個の.txtファイルがあります。Pythonスクリプトで処理するには、これらのファイルの約470をサブセット化する必要があります。以下は、フォルダー内のすべてのファイルをリストする、私のforループの前のコードのセクションです。

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

フォルダーの内容をサブセット化して、3609902sw => 3610032swの範囲にある1500個のファイルのうち470個を含めるにはどうすればよいですか?

回答:


8

ap.Listfilesをすべて一緒に使用してスキップし、xrangeでforループを使用できます...

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

手始めに、ワイルドカードステートメント(* sw.txt)にswを含めることができます。これにより、返されるレコードの数が大幅に削減されると思われます(ne、nw、seなどがあると想定)。

次に、ファイルのサブセットで作業しているので、条件ステートメントを使用してファイルを必要に応じて調整します。

疑似コード:

  1. ワークスペース(ディレクトリ)の設定
  2. txt_list変数を使用したforループ
  3. ファイル名の最初の7文字を格納する変数を作成します(つまり、theNumbers = theFile [:6])
  4. 変数を整数としてキャストします:int(theNumbers)
  5. 変数が3609902以上3610032以下であることをテスト(条件付き)します。
  6. YESの場合、実行する必要があることをすべて実行します


3

あなたはこの方法でそれを行うことができます:

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]

お役に立てば幸いです...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.