да, физический размер файла. Сожалею. Спасибо @gene
Джон
@gene Еще один глупый вопрос. os.path.getsize () возвращает целое число. по умолчанию в КБ?
Джон
1
1kB = 1024 байта, разделите байты на 1024, чтобы получить килобайты (или это были кибибайты, просто чтобы запутать вещи). Точно так же есть 1024 КБ в МБ (МиБ), 1024 МБ в 1 ГБ (ГиБ). Обратите внимание, что размер фигуры - это не весь шейп-файл, это DBF, по крайней мере, SHX, и он должен быть намного больше - вы должны сложить все эти файлы, чтобы получить истинный размер на диске.
Майкл Стимсон
Ответы:
14
Перебирайте все файлы в каталоге shapefile с допустимым расширением shapefile и складывайте их размеры вместе. osМодуль является полезным для решения этой задачи. Вот функция, которая возвращает размер всех файлов шейп-файлов, связанных с входным шейп-файлом, в байтах. Используйте полный путь шейп-файла в качестве ввода.
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
Вместо того, чтобы перечислять все файлы shpDir, вы можете использовать glob.glob(shpFlName + "*")только те файлы, которые имеют одинаковое базовое имя. Тогда это просто фильтр действительных расширений.
Пол
Это правда @Paul, glob действительно удобен, однако решение Эмильса - это родной питон и абсолютно правильное. Метод glob должен быть только дополнительным замечанием, так как в определенных ситуациях пользователи не могут просто установить стороннее программное обеспечение. Я бы поддержал ответ, который требует сторонней установки, только если не было жизнеспособного (или реалистичного) способа сделать это. это в родном питоне.
Майкл Стимсон
@ MichaelMiles-Стимсон globродной, да?
Эмиль Брюндейдж
Я не думаю, что это так, у меня это есть и я часто его использую, но я почти уверен, что мне пришлось его скачать .. Я поместил его в свой список необходимых плагинов для новой установки до pyWin32. Может случиться так, что более поздние версии будут поставляться в комплекте, как в numpy, это также имеет смысл. Я не могу получить доступ к необработанной установке, чтобы увидеть, есть ли глобус, поместив его в список для установки, он всегда там; возможно, кто-то с новой / сырой установкой python мог бы засвидетельствовать это.
Вы можете использовать выражение генератора, чтобы эффективно находить размер шейп-файла (т.е. включая все связанные файлы). Следующий метод использует встроенную функциональность 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))
Выражение генератора выполняет следующие действия:
Список всех связанных файлов шейп-файла. В этом случае удалите расширение «.shp» из пути и используйте его globвместе с путем и подстановочным знаком, *чтобы вывести список всех связанных файлов.
Получите размеры файлов в байтах, используя os.stat
Ответы:
Перебирайте все файлы в каталоге shapefile с допустимым расширением shapefile и складывайте их размеры вместе.
os
Модуль является полезным для решения этой задачи. Вот функция, которая возвращает размер всех файлов шейп-файлов, связанных с входным шейп-файлом, в байтах. Используйте полный путь шейп-файла в качестве ввода.источник
shpDir
, вы можете использоватьglob.glob(shpFlName + "*")
только те файлы, которые имеют одинаковое базовое имя. Тогда это просто фильтр действительных расширений.glob
родной, да?Вы можете использовать выражение генератора, чтобы эффективно находить размер шейп-файла (т.е. включая все связанные файлы). Следующий метод использует встроенную функциональность Python 2.7.
Выражение генератора выполняет следующие действия:
glob
вместе с путем и подстановочным знаком,*
чтобы вывести список всех связанных файлов.os.stat
sum([...])
.источник