Saya menulis skrip Python di Windows. Saya ingin melakukan sesuatu berdasarkan ukuran file. Misalnya, jika ukurannya lebih besar dari 0, saya akan mengirim email kepada seseorang, jika tidak melanjutkan ke hal lain.
Bagaimana saya memeriksa ukuran file?
Path('./doc.txt').stat().st_size
Jawaban:
Anda memerlukan
st_size
properti objek yang dikembalikan olehos.stat
. Anda bisa mendapatkannya dengan menggunakanpathlib
(Python 3.4+):atau menggunakan
os.stat
:Output dalam byte.
sumber
stat_result.st_blocks
dengan ukuran blok, tapi saya masih mencari cara untuk mendapatkannya secara terprogram dan lintas-platform (tidak melaluitune2fs
dll.)Menggunakan
os.path.getsize
:Outputnya dalam byte.
sumber
os.path.getsize
sederhanareturn os.stat(filename).st_size
os.stat
. Maka perbedaannya dapat mencapai sejumlah besar mikrodetik :-)Jawaban lain berfungsi untuk file nyata, tetapi jika Anda memerlukan sesuatu yang berfungsi untuk "objek seperti file", coba ini:
Ini berfungsi untuk file nyata dan StringIO, dalam pengujian terbatas saya. (Python 2.7.3.) API "objek seperti file" sebenarnya bukan antarmuka yang ketat, tetapi dokumentasi API menunjukkan bahwa objek seperti file harus mendukung
seek()
dantell()
.Edit
Perbedaan lain antara ini dan
os.stat()
Anda dapatstat()
file bahkan jika Anda tidak memiliki izin untuk membacanya. Jelas pendekatan mencari / memberi tahu tidak akan berhasil kecuali jika Anda telah membaca izin.Edit 2
Atas saran Jonathon, inilah versi paranoid. (Versi di atas meninggalkan penunjuk file di akhir file, jadi jika Anda mencoba membaca dari file, Anda akan mendapatkan nol byte kembali!)
sumber
os
, alih-alih menulisf.seek(0, 2)
untuk mencari 0 byte dari akhir.os
tidak digunakan:f.seek(old_file_position, 0)
os
.size
output dalam byte?#seek()
: wiki.sei.cmu.edu/confluence/display/c/…Hasil:
sumber
this function will convert bytes to MB.... GB... etc
Salah. Fungsi ini akan mengkonversi byte ke MiB, GiB, dll. Lihat posting ini .return f'{num:.1f} {x}'
dalam Python> = 3.5.Menggunakan
pathlib
( ditambahkan dengan Python 3.4 atau backport yang tersedia di PyPI ):Ini benar-benar hanya antarmuka di sekitar
os.stat
, tetapi menggunakanpathlib
menyediakan cara mudah untuk mengakses operasi terkait file lainnya.sumber
Ada
bitshift
trik yang saya gunakan jika saya ingin mengkonversi daribytes
ke unit lain. Jika Anda melakukan pergeseran dengan benar10
pada dasarnya Anda menggesernya dengan perintah (banyak)sumber
Berpegang teguh pada pertanyaan, kode Python (+ pseudo-code) adalah:
sumber
sumber
kami memiliki dua opsi. Keduanya termasuk mengimpor modul os
1) import os as fungsi os.stat () mengembalikan objek yang berisi begitu banyak header termasuk waktu pembuatan file dan waktu modifikasi terakhir dll. Di antaranya st_size () memberikan ukuran file yang tepat.
os.stat ("nama file"). st_size ()
2) import os. Dalam hal ini, kita harus menyediakan path file yang tepat (path absolut), bukan path relatif.
os.path.getsize ("path of file")
sumber