আমি উইন্ডোজ একটি পাইথন স্ক্রিপ্ট লিখছি। আমি ফাইল আকারের উপর ভিত্তি করে কিছু করতে চাই। উদাহরণস্বরূপ, যদি আকার 0 এর চেয়ে বেশি হয় তবে আমি কারও কাছে একটি ইমেল পাঠাব, অন্যথায় অন্য জিনিসগুলিতে চালিয়ে যান।
আমি কীভাবে ফাইলের আকার চেক করব?
আমি উইন্ডোজ একটি পাইথন স্ক্রিপ্ট লিখছি। আমি ফাইল আকারের উপর ভিত্তি করে কিছু করতে চাই। উদাহরণস্বরূপ, যদি আকার 0 এর চেয়ে বেশি হয় তবে আমি কারও কাছে একটি ইমেল পাঠাব, অন্যথায় অন্য জিনিসগুলিতে চালিয়ে যান।
আমি কীভাবে ফাইলের আকার চেক করব?
উত্তর:
আপনি প্রয়োজন st_size
সম্পত্তির বস্তু দ্বারা ফিরে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
আউটপুট বাইটে হয়?
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
ভুল। এই ফাংশনটি বাইটগুলি এমআইবি, জিআইবি ইত্যাদিতে রূপান্তর করবে এই পোস্টটি দেখুন ।
return f'{num:.1f} {x}'
পাইথন> = 3.5 তে পরিবর্তন করা যেতে পারে ।
ব্যবহার pathlib
( পাইথন ৩.৪-এ যোগ করা বা পিপিআইতে একটি ব্যাকপোর্ট উপলব্ধ ):
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)
প্রশ্নটির সাথে দৃrict়ভাবে আঁকড়ে ধরলে পাইথন কোড (+ সিউডো কোড) হবে:
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.getsize ("ফাইলের পথ")
Path('./doc.txt').stat().st_size