tak, fizyczny rozmiar pliku. Przepraszam. Dziękuję @gene
John
@ gen Kolejne głupie pytanie. os.path.getsize () zwraca liczbę całkowitą. jest domyślne w KB?
Jana,
1
1kB = 1024 bajty, podziel bajty przez 1024, aby uzyskać kilobajty (lub to były kibibajty, żeby pomylić rzeczy). Podobnie 1024 MB w MB (MiB), 1024 MB w 1 GB (GiB). Zwróć uwagę, że rozmiar kształtu to nie cały plik kształtów, w którym są DBF, SHX i na pewno będzie o wiele większy - powinieneś dodać wszystkie te pliki, aby uzyskać prawdziwy rozmiar na dysku.
Michael Stimson,
Odpowiedzi:
14
Iteruj przez wszystkie pliki w katalogu shapefile z prawidłowym rozszerzeniem shapefile i dodaj ich rozmiary razem. osModuł 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
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
Zamiast wylistować wszystkie pliki 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ń.
Paul,
To prawda @Paul, glob jest naprawdę przydatny, jednak rozwiązanie Emilsa jest rodzimym pytonem i absolutnie poprawne. Metoda glob powinna być jedynie informacją poboczną, ponieważ w niektórych sytuacjach użytkownicy nie mogą po prostu zainstalować oprogramowania innej firmy. Poparłbym odpowiedź, która wymaga instalacji innej firmy, jeśli nie ma realnego (lub realistycznego) sposobu wykonania w natywnym pythonie.
Michael Stimson,
@ MichaelMiles-Stimson globjest ojczystym, tak?
Emil Brundage,
Nie sądzę, że tak, mam go i często go używam, ale jestem prawie pewien, że musiałem go pobrać. Umieściłem go na liście wymaganych wtyczek do nowej instalacji przed pyWin32. Może się zdarzyć, że późniejsze wersje będą dostarczane w pakiecie, tak jak w przypadku numpy, to również miałoby sens. Nie mogę uzyskać dostępu do surowej instalacji, aby sprawdzić, czy glob istnieje, ponieważ umieściłem go na liście do zainstalowania, zawsze tam jest; być może ktoś ze świeżą / surową instalacją Pythona mógłby to potwierdzić.
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 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))
Wyrażenie generatora wykonuje następujące czynności:
Wyświetl listę wszystkich powiązanych plików pliku shapefile. W takim przypadku usuń rozszerzenie „.shp” ze ścieżki i użyj globze ścieżką i symbolem wieloznacznym, *aby wyświetlić listę wszystkich powiązanych plików
Uzyskaj rozmiary plików w bajtach za pomocą os.stat
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.źródło
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.
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([...])
.źródło