मैं विंडोज में एक पायथन स्क्रिप्ट लिख रहा हूं। मैं फ़ाइल आकार के आधार पर कुछ करना चाहता हूं। उदाहरण के लिए, यदि आकार 0 से अधिक है, तो मैं किसी को ईमेल भेजूंगा, अन्यथा अन्य चीजों के लिए जारी रखें।
मैं फ़ाइल का आकार कैसे जाँचूँ?
मैं विंडोज में एक पायथन स्क्रिप्ट लिख रहा हूं। मैं फ़ाइल आकार के आधार पर कुछ करना चाहता हूं। उदाहरण के लिए, यदि आकार 0 से अधिक है, तो मैं किसी को ईमेल भेजूंगा, अन्यथा अन्य चीजों के लिए जारी रखें।
मैं फ़ाइल का आकार कैसे जाँचूँ?
जवाबों:
आपको द्वारा दी गई वस्तु की st_size
संपत्ति चाहिए । आप इसे (पायथन 3.4+) का उपयोग करके प्राप्त कर सकते हैं :os.stat
pathlib
>>> from pathlib import Path
>>> Path('somefile.txt').stat()
os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400)
>>> Path('somefile.txt').stat().st_size
1564
या उपयोग कर रहा है os.stat
:
>>> import os
>>> os.stat('somefile.txt')
os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400)
>>> os.stat('somefile.txt').st_size
1564
आउटपुट बाइट्स में है।
stat_result.st_blocks
ब्लॉक आकार से गुणा कर सकते हैं , लेकिन मैं अभी भी खोज रहा हूं कि इसे प्रोग्रामेटिक रूप से और क्रॉस-प्लेटफॉर्म कैसे प्राप्त किया जाए ( tune2fs
आदि के माध्यम से नहीं )
का उपयोग कर os.path.getsize
:
>>> import os
>>> b = os.path.getsize("/path/isa_005.mp3")
>>> b
2071611
आउटपुट बाइट्स में है।
os.path.getsize
बस हैreturn os.stat(filename).st_size
os.stat
। तब अंतर काफी हद तक माइक्रोसेकंड में चल सकता था :-)
अन्य उत्तर वास्तविक फ़ाइलों के लिए काम करते हैं, लेकिन अगर आपको "फ़ाइल जैसी वस्तुओं" के लिए काम करने की आवश्यकता है, तो यह कोशिश करें:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
यह मेरे सीमित परीक्षण में वास्तविक फ़ाइलों और स्ट्रिंगो के लिए काम करता है। (पायथन 2.7.3।) "फाइल-लाइक ऑब्जेक्ट" एपीआई वास्तव में एक कठोर इंटरफ़ेस नहीं है, लेकिन एपीआई प्रलेखन का सुझाव है कि फ़ाइल जैसी वस्तुओं का समर्थन करना चाहिए seek()
और tell()
।
संपादित करें
इसके बीच एक और अंतर यह os.stat()
है कि आप stat()
एक फाइल कर सकते हैं, भले ही आपको इसे पढ़ने की अनुमति न हो। जब तक आपने अनुमति नहीं ली है, स्पष्ट रूप से तलाश / बताओ दृष्टिकोण काम नहीं करेगा।
संपादित करें 2
जोनाथन के सुझाव पर, यहां एक विरोधाभास संस्करण है। (संस्करण ऊपर फ़ाइल पॉइंटर को फ़ाइल के अंत में छोड़ देता है, इसलिए यदि आप फ़ाइल से पढ़ने का प्रयास करते हैं, तो आपको शून्य बाइट्स वापस मिल जाएगी!)
# f is a file-like object.
old_file_position = f.tell()
f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(old_file_position, os.SEEK_SET)
os
, इसके बजाय f.seek(0, 2)
अंत से 0 बाइट्स की तलाश करें।
os
इसका उपयोग नहीं किया जाता है:f.seek(old_file_position, 0)
os
।
size
आउटपुट बाइट्स में है?
#seek()
: wiki.sei.cmu.edu/confluence/display/c/…
import os
def convert_bytes(num):
"""
this function will convert bytes to MB.... GB... etc
"""
for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
if num < 1024.0:
return "%3.1f %s" % (num, x)
num /= 1024.0
def file_size(file_path):
"""
this function will return the file size
"""
if os.path.isfile(file_path):
file_info = os.stat(file_path)
return convert_bytes(file_info.st_size)
# Lets check the file size of MS Paint exe
# or you can use any file path
file_path = r"C:\Windows\System32\mspaint.exe"
print file_size(file_path)
परिणाम:
6.1 MB
this function will convert bytes to MB.... GB... etc
गलत। यह फ़ंक्शन बाइट्स को MiB, GiB आदि में बदल देगा । इस पोस्ट को देखें ।
return f'{num:.1f} {x}'
पायथन> = 3.5 में बदला जा सकता है ।
उपयोग करना pathlib
( पायथन 3.4 में जोड़ा गया या PyPI पर उपलब्ध एक बैकपोर्ट ):
from pathlib import Path
file = Path() / 'doc.txt' # or Path('./doc.txt')
size = file.stat().st_size
यह वास्तव में केवल एक इंटरफ़ेस है os.stat
, लेकिन pathlib
अन्य संबंधित फ़ाइल तक पहुँचने के लिए एक आसान तरीका प्रदान करता है।
bitshift
अगर मैं bytes
किसी अन्य इकाई से परिवर्तित करना चाहता हूं तो एक चाल है जिसका मैं उपयोग करता हूं । यदि आप अपने द्वारा एक सही शिफ्ट करते हैं 10
तो मूल रूप से इसे एक ऑर्डर (कई) द्वारा शिफ्ट करते हैं।
उदाहरण:
5GB are 5368709120 bytes
print (5368709120 >> 10) # 5242880 kilobytes (kB)
print (5368709120 >> 20 ) # 5120 megabytes (MB)
print (5368709120 >> 30 ) # 5 gigabytes (GB)
प्रश्न पर सख्ती से चिपका, पायथन कोड (+ छद्म कोड) होगा:
import os
file_path = r"<path to your file>"
if os.stat(file_path).st_size > 0:
<send an email to somebody>
else:
<continue to other things>
#Get file size , print it , process it...
#Os.stat will provide the file size in (.st_size) property.
#The file size will be shown in bytes.
import os
fsize=os.stat('filepath')
print('size:' + fsize.st_size.__str__())
#check if the file size is less than 10 MB
if fsize.st_size < 10000000:
process it ....
हमारे पास दो विकल्प हैं दोनों में शामिल हैं ओएस मॉड्यूल आयात करना
1) os.stat () फ़ंक्शन के रूप में ओएस को आयात करता है जो एक ऑब्जेक्ट देता है जिसमें फ़ाइल हेडर और अंतिम संशोधित समय आदि सहित कई हेडर होते हैं .. उनमें से st_size () फ़ाइल का सटीक आकार देता है।
os.stat ( "फ़ाइल नाम")। st_size ()
2) इम्पोर्ट ओ एस। इसमें हमें सटीक फाइल पथ (निरपेक्ष पथ) प्रदान करना होता है, न कि कोई सापेक्षिक पथ।
os.path.getize ("फ़ाइल का पथ")
Path('./doc.txt').stat().st_size