Est-il possible de récupérer la taille d'un fichier de formes en utilisant python et arcpy? Si c'est le cas, comment?
Est-il possible de récupérer la taille d'un fichier de formes en utilisant python et arcpy? Si c'est le cas, comment?
Réponses:
Parcourez tous les fichiers du répertoire de fichiers de formes avec une extension de fichier de formes valide et ajoutez leurs tailles ensemble. Le os
module est utile pour cette tâche. Voici une fonction qui renvoie la taille de tous les fichiers de fichiers de formes associés à un fichier de formes d'entrée en octets. Utilisez le chemin complet du fichier de formes comme entrée.
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
, vous pouvez utiliser glob.glob(shpFlName + "*")
pour renvoyer uniquement les fichiers ayant le même nom de base. Ensuite, c'est juste un filtre sur les extensions valides.
glob
est natif, oui?
Vous pouvez utiliser une expression de générateur pour trouver efficacement la taille du fichier de formes (c'est-à-dire y compris tous les fichiers associés). La méthode suivante utilise la fonctionnalité Python 2.7 intégrée.
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))
L'expression du générateur fait ce qui suit:
glob
avec le chemin d'accès et le caractère générique *
pour répertorier tous les fichiers associésos.stat
sum([...])
.