oui, la taille du fichier physique. Pardon. Merci @gene
John
@gene Une autre question stupide. os.path.getsize () renvoie un entier. est la valeur par défaut en Ko?
John
1
1 Ko = 1 024 octets, divisez les octets par 1 024 pour obtenir des kilo-octets (ou était-ce des kibio-octets, juste pour confondre les choses). De même, il y a 1024 Ko dans un Mo (MiB), 1024 Mo dans 1 Go (GiB). Notez que la taille de la forme n'est pas tout le fichier de formes qu'il y a au moins DBF, SHX et devrait être beaucoup plus - vous devez ajouter tous ces fichiers pour obtenir la vraie taille sur le disque.
Michael Stimson
Réponses:
14
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 osmodule 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 osdefShpSize(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 filesfor fl in os.listdir (shpDir):#standardize lowercase
fl = fl.lower ()#skip file names that don't match shapefile
flName = os.path.splitext(fl)[0]ifnot flName == shpFlName:#special case: .shp.xml fileifnot fl == shpFlName +".shp.xml":continue#skip file names without proper extension
ext = os.path.splitext(fl)[1]ifnot ext in extensions:continue#get size
flFullPath = os.path.join (shpDir, fl)
size += os.path.getsize (flFullPath)return size
Au lieu de répertorier tous les fichiers 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.
Paul
C'est vrai @Paul, glob est vraiment pratique, mais la solution d'Emils est en python natif et absolument correcte. La méthode glob ne devrait être qu'une note secondaire car, dans certaines situations, les utilisateurs ne peuvent pas simplement installer un logiciel tiers. en python natif.
Michael Stimson
@ MichaelMiles-Stimson globest natif, oui?
Emil Brundage
Je ne pense pas que ce soit le cas, je l'ai et je l'utilise fréquemment mais je suis à moitié sûr de devoir le télécharger .. Je l'ai mis sur ma liste de plugins requis pour une nouvelle installation avant pyWin32. Il se peut que des versions ultérieures soient fournies, comme avec numpy, cela aurait également du sens. Je ne peux pas accéder à une installation brute pour voir si glob est là, l'ayant mis sur la liste à installer, il est toujours là; peut-être que quelqu'un avec une installation fraîche / brute de python pourrait en témoigner.
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 filesfor 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:
Répertorie tous les fichiers associés d'un fichier de formes. Dans ce cas, supprimez l'extension ".shp" du chemin d'accès et utilisez-la globavec le chemin d'accès et le caractère générique *pour répertorier tous les fichiers associés
Obtenez les tailles de fichier en octets en utilisant os.stat
Additionnez-les à l'aide du générateur sum([...]).
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.la source
shpDir
, vous pouvez utiliserglob.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.
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([...])
.la source