เมื่อคุณใช้ Python คุณต้องใช้โมดูลที่ถูกต้องเพื่อทำสิ่งที่คุณต้องการ หากต้องการค้นหาไฟล์ทั้งหมดในไดเรกทอรีที่มีนามสกุล shp มีวิธีแก้ปัญหาที่ง่ายกว่าที่นำเสนอโดยไม่มีการหยุดพักซึ่งน่ากลัว ... (ตามวิธีการนำเสนอโดย Nathan W แต่มีวิธีอื่น ๆ อีกมากมายเช่น ค้นหาบนอินเทอร์เน็ต)
ตัวอย่างบางส่วนที่เกี่ยวข้องกับโมดูล:
1) ด้วยโมดูล glob:
รูปร่างเท่านั้น:
import glob
import os
os.chdir("mydir")
for files in glob.glob("*.shp"):
print files
shapefiles และฐานข้อมูล geod:
import glob
types = ('*.shp', '*.gbd') # the tuple of file types
files_grabbed = []
for files in types:
files_grabbed.extend(glob.glob(files)) #files_grabbed = the list of shp and gbd files
หากคุณต้องการค้นหาในไดเรกทอรีย่อยด้วย:
import glob
for f in glob.iglob("/mydir/*/*.shp"): #search immediate subdirectories
print f
2) ด้วย os.listdir และรายการความเข้าใจ (ในสองบรรทัด) -> รายการผลลัพธ์
path = 'mydir'
shape_files = [f for f in os.listdir(path) if f.endswith('.shp')]
gdb_files = [f for f in os.listdir(path) if f.endswith('.gdb')]
3) กับโมดูล fnmatch:
import fnmatch
for file in os.listdir('path'):
if fnmatch.fnmatch(file, '*.shp'):
print file
และโซลูชั่นอื่น ๆ มากมาย recursive ฯลฯ
arcpy.da.walk
มาก