sim, o tamanho do arquivo físico. Desculpa. Obrigado @gene
John
@gene Outra pergunta boba. os.path.getsize () retorna um número inteiro. é o padrão em KB?
John
1
1kB = 1024 bytes, divida os bytes por 1024 para obter kilobytes (ou eram esses kibibytes, apenas para confundir as coisas). Da mesma forma, há 1024kB em um MB (MiB), 1024 MB em 1 GB (GiB). Observe que o tamanho da forma não é todo o arquivo shapefile, há pelo menos DBF, SHX e é muito mais - você deve adicionar todos esses arquivos para obter o tamanho real no disco.
Michael Stimson
Respostas:
14
Itere todos os arquivos no diretório shapefile com uma extensão válida e adicione seus tamanhos. O osmódulo é útil para esta tarefa. Aqui está uma função que retorna o tamanho de todos os arquivos shapefile associados a um shapefile de entrada em bytes. Use o caminho completo do shapefile como sua 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
Em vez de listar todos os arquivos shpDir, você pode usar glob.glob(shpFlName + "*")apenas para retornar arquivos com o mesmo nome de base. Então é apenas um filtro em extensões válidas.
Paul
Isso é verdade @Paul, glob é realmente útil, no entanto, a solução de Emils é python nativa e absolutamente correta. O método glob deve ser apenas uma observação secundária, pois, em certas situações, os usuários não podem simplesmente instalar software de terceiros. Eu apenas daria suporte a uma resposta que requer instalação de terceiros se não houvesse uma maneira viável (ou realista) de fazer em python nativo.
Michael Stimson
@ MichaelMiles-Stimson globé nativo, sim?
Emil Brundage
Acho que não, eu o tenho e o uso com frequência, mas tenho quase a certeza de que precisava baixá-lo. Coloquei-o na minha lista de plugins necessários para uma nova instalação antes do pyWin32. Pode ser que versões posteriores sejam incluídas, como numpy, isso também faria sentido. Não consigo acessar uma instalação bruta para ver se a glob está lá; depois de colocá-la na lista a ser instalada, ela está sempre lá; talvez alguém com uma instalação nova / bruta de python possa atestar isso.
Você pode usar uma expressão de gerador para encontrar com eficiência o tamanho do arquivo shapefile (ou seja, incluindo todos os arquivos associados). O método a seguir usa a funcionalidade interna do 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))
A expressão do gerador faz o seguinte:
Listar todos os arquivos associados de um shapefile. Nesse caso, retire a extensão ".shp" do caminho e use globcom o caminho e o curinga *para listar todos os arquivos associados
Obtenha os tamanhos de arquivo em bytes usando os.stat
Respostas:
Itere todos os arquivos no diretório shapefile com uma extensão válida e adicione seus tamanhos. O
os
módulo é útil para esta tarefa. Aqui está uma função que retorna o tamanho de todos os arquivos shapefile associados a um shapefile de entrada em bytes. Use o caminho completo do shapefile como sua entrada.fonte
shpDir
, você pode usarglob.glob(shpFlName + "*")
apenas para retornar arquivos com o mesmo nome de base. Então é apenas um filtro em extensões válidas.glob
é nativo, sim?Você pode usar uma expressão de gerador para encontrar com eficiência o tamanho do arquivo shapefile (ou seja, incluindo todos os arquivos associados). O método a seguir usa a funcionalidade interna do Python 2.7.
A expressão do gerador faz o seguinte:
glob
com o caminho e o curinga*
para listar todos os arquivos associadosos.stat
sum([...])
.fonte