Nội dung thư mục tập hợp con ArcPy


8

Tôi có khoảng 1500 tệp .txt trong một thư mục có tên 3410001ne => 3809962sw. Tôi cần tập hợp khoảng 470 tệp này để xử lý với tập lệnh Python. Dưới đây là phần mã trước vòng lặp for của tôi liệt kê tất cả các tệp trong một thư mục:

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

Làm cách nào tôi có thể tập hợp các nội dung thư mục để bao gồm 470 trên 1500 tệp từ 3609902sw => 3610032sw?

Câu trả lời:


8

Bạn có thể bỏ qua việc sử dụng ap.Listfiles cùng nhau và sử dụng vòng lặp for với 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

Để bắt đầu, bạn có thể bao gồm sw trong câu lệnh ký tự đại diện (* sw.txt), điều này có lẽ sẽ làm giảm đáng kể số lượng hồ sơ được trả về của bạn (giả sử bạn có ne, nw, se, v.v.).

Thứ hai, bây giờ bạn đang làm việc với một tập hợp con các tệp, hãy sử dụng câu lệnh có điều kiện để gạt các tệp của bạn theo nhu cầu chính xác của bạn.

Mã giả:

  1. Đặt không gian làm việc (thư mục)
  2. Đối với vòng lặp với txt_list var của bạn
  3. Tạo một biến lưu trữ 7 ký tự đầu tiên trong tên tệp (ví dụ: theNumbers = theFile [: 6])
  4. Truyền biến dưới dạng một số nguyên: int (theNumbers)
  5. Kiểm tra (có điều kiện) rằng biến của bạn lớn hơn hoặc bằng 3609902 và nhỏ hơn hoặc bằng 3610032
  6. Nếu , hãy làm bất cứ điều gì cần làm

6

Dựa trên lời giải thích của Roy:

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

3

bạn có thể làm điều đó theo cách này:

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]

Tôi hy vọng nó sẽ giúp bạn...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.