Komentáře
Odpověď
Vaše cesta arcpy.env.workspace
– F:\raster_test
– pravděpodobně neexistuje nebo k němu nemá arcpy přístup. arcpy.ListRasters()
vrátí prázdný seznam []
pokud nejsou nalezeny žádné rastry, ale vrátí se None
, pokud cesta nebyla nalezena:
Cesta neexistuje:
arcpy.env.workspace = r"C:\Temp" # Does Exist rasters = arcpy.ListRasters("*.tif) print rasters
Bude výstup:
[]
Cesta not existují:
arcpy.env.workspace = r"C:\Temp2" # Does NOT Exist rasters = arcpy.ListRasters("*.tif) print rasters
Bude výstup:
None
Odpověď
… také, tento záložní řádek je zálohován blíže k začátku kódu (v Pythonu je úniková sekvence):
arcpy.env.workspace = "F:\raster_test" # Does NOT Exist
Pokud je F: \ raster_test platná cesta (a obsahuje rastry), pak by to mělo fungovat dobře:
arcpy.env.workspace = r"F:\raster_test" # Does Exist
Viz část dokumentu Python o řetězcových literálech .
Komentáře
- +1 @Sujai Toto je klasický python gotcha (alespoň v systému Windows). " \ r " je řídicí sekvence pro návrat vozíku. Aktuálnější (i když se skutečné únikové sekvence ' t nezměnily) je docs.python.org/2/reference/ lexical_analysis.html # strings
- Máte ' pravdu, Luke …. odkaz v odpovědi aktualizován na novější odkaz. Spousta dalších dobrých věcí na této stránce.
Odpovědět
Nejsem si jistý, co je příčinou vašeho NoneType
, arcpy.ListRasters()
vrátí prázdný seznam a nikdy NoneType
pokud by neexistovaly rastry nalezeno. Zkuste to:
import arcpy import os from arcpy.sa import ExtractByMask out_dir = r"F:\clipped_images" arcpy.env.workspace = r"F:\raster\test" arcpy.CheckOutExtension("Spatial") mask = r"F:\shapefile\Export_Output.shp" for raster in arcpy.ListRasters("*.tif"): output_raster = os.path.join(out_dir, os.path.splitext(raster)[0] + "_clip.tif") ExtractByMask(raster, mask, output_raster) arcpy.CheckInExtension("Spatial")
Odpověď
Věřím, že různé List
funkce (ListTables
, ListFeatureclasses
atd.) vždy vrátí None
pokud v daném pracovním prostoru nejsou žádné odpovídající typy. Proveďte rychlý if
logický test proměnné seznamu.
rasters = arcpy.ListRasters ("*.TIF") if rasters: your code here
.TIFF
Soubory, které mají být zahrnuty, stejně jako.TIF