Czy można pobrać rozmiar pliku kształtu za pomocą Pythona i Arcpy? Jeśli tak to jak?
Czy można pobrać rozmiar pliku kształtu za pomocą Pythona i Arcpy? Jeśli tak to jak?
Odpowiedzi:
Iteruj przez wszystkie pliki w katalogu shapefile z prawidłowym rozszerzeniem shapefile i dodaj ich rozmiary razem. os
Moduł jest pomocne dla tego zadania. Oto funkcja, która zwraca rozmiar wszystkich plików shapefile powiązanych z wejściowym plikiem shapefile w bajtach. Użyj pełnej ścieżki pliku shapefile jako danych wejściowych.
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
, możesz użyć glob.glob(shpFlName + "*")
tylko do zwracania plików o tej samej nazwie basename. To tylko filtr do prawidłowych rozszerzeń.
glob
jest ojczystym, tak?
Możesz użyć wyrażenia generatora, aby efektywnie znaleźć rozmiar pliku kształtu (tj. Włączając wszystkie powiązane pliki). Poniższa metoda wykorzystuje wbudowaną funkcjonalność 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 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))
Wyrażenie generatora wykonuje następujące czynności:
glob
ze ścieżką i symbolem wieloznacznym, *
aby wyświetlić listę wszystkich powiązanych plikówos.stat
sum([...])
.