Ja, die physische Dateigröße. Es tut uns leid. Vielen Dank, dass Sie @gene
John
@gene Noch eine dumme Frage. os.path.getsize () gibt eine Ganzzahl zurück. ist die Standardeinstellung in KB?
John
1
1 kB = 1024 Bytes, dividieren Sie Bytes durch 1024, um Kilobytes zu erhalten (oder waren das Kibibytes, nur um die Dinge zu verwirren). Ebenso sind 1024 KB in einem MB (MiB), 1024 MB in 1 GB (GiB). Beachten Sie, dass die Größe der Form nicht die gesamte Formdatei ist, sondern mindestens DBF, SHX und viel mehr. Sie sollten alle diese Dateien addieren, um die wahre Größe auf der Disc zu erhalten.
Michael Stimson
Antworten:
14
Durchlaufen Sie alle Dateien im Shapefile-Verzeichnis mit einer gültigen Shapefile-Erweiterung und addieren Sie deren Größen. Das osModul 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
defShpSize(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
Anstatt alle Dateien in aufzulisten 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.
Paul
Das stimmt @Paul, glob ist wirklich praktisch, aber Emils 'Lösung ist natives Python und absolut korrekt. Die Glob-Methode sollte nur eine Randnotiz sein, da Benutzer in bestimmten Situationen nicht einfach Software von Drittanbietern installieren können. Ich würde eine Antwort, die eine Installation von Drittanbietern erfordert, nur unterstützen, wenn es keine praktikable (oder realistische) Vorgehensweise gibt es in nativer Python.
Michael Stimson
@ MichaelMiles-Stimson globist gebürtig, ja?
Emil Brundage
Ich glaube nicht, dass ich es habe und es häufig benutze, aber ich bin mir ziemlich sicher, dass ich es herunterladen musste. Ich habe es vor pyWin32 auf meine Liste der erforderlichen Plugins für eine neue Installation gesetzt. Es kann sein, dass spätere Versionen wie bei Numpy gebündelt werden, was ebenfalls Sinn macht. Ich kann nicht auf eine unformatierte Installation zugreifen, um zu sehen, ob glob vorhanden ist. Vielleicht könnte jemand mit einer neuen / rohen Python-Installation dies bestätigen.
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 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))
Der Generatorausdruck führt Folgendes aus:
Listen Sie alle zugehörigen Dateien eines Shapefiles auf. Entfernen Sie in diesem Fall die Erweiterung ".shp" vom Pfad und verwenden Sie globden Pfad und den Platzhalter, *um alle zugehörigen Dateien aufzulisten
Holen Sie sich die Dateigrößen in Bytes mit os.stat
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.quelle
shpDir
, können Sieglob.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.
Der Generatorausdruck führt Folgendes aus:
glob
den Pfad und den Platzhalter,*
um alle zugehörigen Dateien aufzulistenos.stat
sum([...])
.quelle