Ist es möglich, die Größe eines Shapefiles mit Python und Arcpy abzurufen? Wenn das so ist, wie?
Ist es möglich, die Größe eines Shapefiles mit Python und Arcpy abzurufen? Wenn das so ist, wie?
Antworten:
Durchlaufen Sie alle Dateien im Shapefile-Verzeichnis mit einer gültigen Shapefile-Erweiterung und addieren Sie deren Größen. Das os
Modul ist für diese Aufgabe hilfreich. Hier ist eine Funktion, die die Größe aller Shapefile-Dateien, die einem Eingabe-Shapefile zugeordnet sind, in Bytes zurückgibt. Verwenden Sie den vollständigen Pfad des Shapefiles als Eingabe.
import os
def ShpSize (inShp):
#standardize lowercase
inShp = inShp.lower ()
#shapefile extensions
extensions = [".shp",
".shx",
".dbf",
".sbn",
".sbx",
".fbn",
".fbx",
".ain",
".aih",
".atx",
".ixs",
".mxs",
".prj",
".xml",
".cpg"]
#shape file name without directory
shpName = os.path.basename (inShp)
#shape file name without .shp extension
shpFlName = os.path.splitext(shpName)[0]
#size set to zero
size = 0
#directory of shapefile
shpDir = os.path.dirname (inShp)
#iterate directory files
for fl in os.listdir (shpDir):
#standardize lowercase
fl = fl.lower ()
#skip file names that don't match shapefile
flName = os.path.splitext(fl)[0]
if not flName == shpFlName:
#special case: .shp.xml file
if not fl == shpFlName + ".shp.xml":
continue
#skip file names without proper extension
ext = os.path.splitext(fl)[1]
if not ext in extensions:
continue
#get size
flFullPath = os.path.join (shpDir, fl)
size += os.path.getsize (flFullPath)
return size
shpDir
, können Sie glob.glob(shpFlName + "*")
nur Dateien zurückgeben, die denselben Basisnamen haben. Dann ist es nur ein Filter für gültige Erweiterungen.
glob
ist gebürtig, ja?
Sie können einen Generatorausdruck verwenden, um die Größe des Shapefiles effizient zu ermitteln (dh alle zugehörigen Dateien einzuschließen). Die folgende Methode verwendet die integrierte Python 2.7-Funktionalität.
import os, glob
ws = r'C:\path\to\your\shapefiles' # input workspace
shapefiles = glob.glob(os.path.join(ws, "*.shp")) # List all .shp files
for shapefile in shapefiles:
s = sum([os.stat(x).st_size for x in glob.glob(shapefile.split(".")[0] + "*")])
print "The file size for %s is %s bytes or %s kb" % (shapefile, s, (float(s)/1000))
Der Generatorausdruck führt Folgendes aus:
glob
den Pfad und den Platzhalter, *
um alle zugehörigen Dateien aufzulistenos.stat
sum([...])
.