Sí, el tamaño del archivo físico. Lo siento. Gracias @gene
John
@gene Otra pregunta tonta. os.path.getsize () devuelve un entero. Cuál es el valor predeterminado en KB?
John
1
1kB = 1024 bytes, divida los bytes por 1024 para obtener kilobytes (o eso era kibibytes, solo para confundir las cosas). Del mismo modo, hay 1024kB en un MB (MiB), 1024 MB en 1 GB (GiB). Tenga en cuenta que el tamaño de la forma no es todo el archivo de forma que hay DBF, SHX al menos y seguramente será mucho más: debe agregar todos esos archivos para obtener el tamaño verdadero en el disco.
Michael Stimson
Respuestas:
14
Itere a través de todos los archivos en el directorio de shapefile con una extensión de shapefile válida y agregue sus tamaños juntos. El osmódulo es útil para esta tarea. Aquí hay una función que devuelve el tamaño de todos los archivos shapefile asociados con un shapefile de entrada en bytes. Use la ruta completa del archivo de forma como su entrada.
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
En lugar de enumerar todos los archivos shpDir, puede usar glob.glob(shpFlName + "*")para devolver solo archivos que tengan el mismo nombre base. Entonces es solo un filtro en extensiones válidas.
Paul
Eso es cierto @Paul, glob es realmente útil, sin embargo, la solución de Emils es python nativa y absolutamente correcta. El método global solo debe ser una nota al margen ya que, en ciertas situaciones, los usuarios no pueden simplemente instalar software de terceros. Solo admitiría una respuesta que requiera una instalación de terceros si no hubiera una manera viable (o realista) de hacerlo en python nativo
Michael Stimson
@ MichaelMiles-Stimson globes nativo, ¿sí?
Emil Brundage
No creo que lo sea, lo tengo y lo uso con frecuencia, pero estoy casi seguro de que tuve que descargarlo. Lo puse en mi lista de complementos necesarios para una nueva instalación antes de pyWin32. Puede ser que las versiones posteriores vengan agrupadas, como con numpy, eso también tendría sentido. No puedo acceder a una instalación en bruto para ver si Glob está allí, después de haberlo puesto en la lista para instalarlo siempre está ahí; tal vez alguien con una instalación fresca / sin procesar de python pueda dar fe de eso.
Puede usar una expresión generadora para encontrar eficientemente el tamaño del archivo de forma (es decir, incluir todos los archivos asociados). El siguiente método utiliza la funcionalidad incorporada de Python 2.7.
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))
La expresión del generador hace lo siguiente:
Lista todos los archivos asociados de un shapefile. En este caso, quite la extensión ".shp" de la ruta y úsela globcon la ruta y el comodín *para enumerar todos los archivos asociados
Obtenga los tamaños de archivo en bytes usando os.stat
Respuestas:
Itere a través de todos los archivos en el directorio de shapefile con una extensión de shapefile válida y agregue sus tamaños juntos. El
os
módulo es útil para esta tarea. Aquí hay una función que devuelve el tamaño de todos los archivos shapefile asociados con un shapefile de entrada en bytes. Use la ruta completa del archivo de forma como su entrada.fuente
shpDir
, puede usarglob.glob(shpFlName + "*")
para devolver solo archivos que tengan el mismo nombre base. Entonces es solo un filtro en extensiones válidas.glob
es nativo, ¿sí?Puede usar una expresión generadora para encontrar eficientemente el tamaño del archivo de forma (es decir, incluir todos los archivos asociados). El siguiente método utiliza la funcionalidad incorporada de Python 2.7.
La expresión del generador hace lo siguiente:
glob
con la ruta y el comodín*
para enumerar todos los archivos asociadosos.stat
sum([...])
.fuente