ya, ukuran file fisiknya. Maaf. Terima kasih @ gen
John
@ Gen pertanyaan konyol lainnya. os.path.getsize () mengembalikan integer. apakah standar dalam KB?
John
1
1kB = 1024 byte, bagi byte dengan 1024 untuk mendapatkan kilobyte (atau apakah itu kibibyte, hanya untuk membingungkan hal-hal). Demikian juga ada 1024kB dalam MB (MiB), 1024 MB dalam 1 GB (GiB). Perhatikan bahwa ukuran bentuk tidak semua dari shapefile ada DBF, paling tidak SHX dan pasti lebih banyak - Anda harus menambahkan semua file untuk mendapatkan ukuran sebenarnya pada disk.
Michael Stimson
Jawaban:
14
Iterasi semua file dalam direktori shapefile dengan ekstensi shapefile yang valid dan tambahkan ukurannya bersama-sama. The osModul ini berguna untuk tugas ini. Berikut adalah fungsi yang mengembalikan ukuran semua file shapefile yang terkait dengan input shapefile dalam byte. Gunakan path lengkap dari shapefile sebagai input Anda.
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
Alih-alih mendaftar semua file shpDir, Anda dapat menggunakan glob.glob(shpFlName + "*")hanya mengembalikan file yang memiliki nama samaran yang sama. Maka itu hanya filter pada ekstensi yang valid.
Paul
Itu benar @ Paul, glob sangat berguna namun solusi Emils adalah python asli dan benar-benar benar. Metode glob seharusnya hanya menjadi catatan tambahan karena, dalam situasi tertentu, pengguna tidak dapat hanya menginstal perangkat lunak pihak ke-3. Saya hanya akan mendukung jawaban yang memerlukan instalasi pihak ke-3 jika tidak ada cara yang layak (atau realistis) untuk melakukan itu dalam python asli.
Michael Stimson
@ MichaelMiles-Stimson globasli, ya?
Emil Brundage
Saya rasa tidak, saya sudah mendapatkannya dan sering menggunakannya, tetapi saya yakin saya harus mengunduhnya .. Saya meletakkannya di daftar plugin yang diperlukan untuk instalasi baru sebelum pyWin32. Bisa jadi versi yang lebih baru dibundel, seperti numpy, itu juga masuk akal. Saya tidak dapat mengakses instalasi mentah untuk melihat apakah glob ada di sana, setelah memasukkannya ke daftar yang akan diinstal selalu ada; mungkin seseorang dengan instalasi python yang segar / mentah bisa membuktikannya.
Anda dapat menggunakan ekspresi generator untuk secara efisien menemukan ukuran shapefile (yaitu termasuk semua file terkait). Metode berikut ini menggunakan fungsionalitas Python 2.7 bawaan.
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))
Ekspresi generator melakukan hal berikut:
Daftar semua file yang terkait dari suatu shapefile. Dalam hal ini, lepaskan ekstensi ".shp" dari path dan gunakan globdengan path dan wildcard *untuk mendaftar semua file terkait
Dapatkan ukuran file dalam byte menggunakan os.stat
Jumlahkan mereka menggunakan generator sum([...]).
Jawaban:
Iterasi semua file dalam direktori shapefile dengan ekstensi shapefile yang valid dan tambahkan ukurannya bersama-sama. The
os
Modul ini berguna untuk tugas ini. Berikut adalah fungsi yang mengembalikan ukuran semua file shapefile yang terkait dengan input shapefile dalam byte. Gunakan path lengkap dari shapefile sebagai input Anda.sumber
shpDir
, Anda dapat menggunakanglob.glob(shpFlName + "*")
hanya mengembalikan file yang memiliki nama samaran yang sama. Maka itu hanya filter pada ekstensi yang valid.glob
asli, ya?Anda dapat menggunakan ekspresi generator untuk secara efisien menemukan ukuran shapefile (yaitu termasuk semua file terkait). Metode berikut ini menggunakan fungsionalitas Python 2.7 bawaan.
Ekspresi generator melakukan hal berikut:
glob
dengan path dan wildcard*
untuk mendaftar semua file terkaitos.stat
sum([...])
.sumber