Python کے ساتھ فائلیں پڑھنا

تعارف

ذخیرہ شدہ ڈیٹا کے ساتھ کام کرنے کے لیے، فائل ہینڈلنگ ہر پیشہ ور Python پروگرامر کا بنیادی علم بن جاتا ہے۔ اس کی ابتدائی ریلیز سے ہی، فائلوں میں ڈیٹا پڑھنا اور لکھنا دونوں ہی Python کی خصوصیات میں شامل ہیں۔ سی یا جاوا جیسی دیگر پروگرامنگ زبانوں کے مقابلے میں، یہ بہت آسان ہے اور اس کے لیے کوڈ کی صرف چند لائنوں کی ضرورت ہوتی ہے۔ مزید برآں، اسے صحیح طریقے سے کرنے کے لیے کوئی اضافی ماڈیول لوڈ کرنے کی ضرورت نہیں ہے۔

اس آرٹیکل میں ہم وضاحت کریں گے کہ Python کے ساتھ فائلز کو کیسے پڑھا جائے۔ کچھ مثالوں میں ایک فائل کو لائن بہ لائن پڑھنا، ایک حصہ کے طور پر (ایک وقت میں لائنوں کی ایک متعین تعداد)، اور ایک بار میں فائل پڑھنا شامل ہے۔ اس کے علاوہ، ہم آپ کو فائل سے ایک مخصوص لائن کو پڑھنے کا طریقہ دکھائیں گے، صرف، پوری فائل کو تلاش کیے بغیر۔

ازگر میں فائلوں کی بنیادی باتیں

فائلوں کے ساتھ کام کرنے کے عام طریقے ہیں۔ open() فائل کھولنے کے لیے، seek() دیے گئے آفسیٹ پر فائل کی موجودہ پوزیشن سیٹ کرنے کے لیے، اور close() فائل آبجیکٹ کو بند کرنے کے لیے جب آپ اسے استعمال کر لیں۔ بلٹ میں open() فنکشن ایک فائل ہینڈل لوٹاتا ہے جو ایک فائل آبجیکٹ کی نمائندگی کرتا ہے جسے پڑھنے، لکھنے، یا شامل کرنے کے لیے فائل تک رسائی کے لیے استعمال کیا جائے گا۔

پڑھنے کے لیے فائل کھولتے وقت، ازگر کو یہ جاننے کی ضرورت ہوتی ہے کہ سسٹم کے ساتھ فائل کو کیسے کھولا جانا چاہیے۔ رسائی کے دو طریقے دستیاب ہیں - بائنری موڈ میں پڑھنا اور پڑھنا۔ متعلقہ جھنڈے استعمال کیے گئے ہیں۔ 'r'، اور 'rb'، اور بلٹ ان کے ساتھ فائل کھولتے وقت اس کی وضاحت کرنا ہوگی۔ open() فنکشن پہلے موڈ میں لائن بریکس کی نمائندگی کرنے کے لیے خاص حروف جیسے "CR" (کیریج ریٹرن) اور "LF" (linefeed) کی تشریح شامل ہے، جب کہ بائنری موڈ آپ کو ڈیٹا کو خام موڈ میں پڑھنے کی اجازت دیتا ہے - جہاں ڈیٹا کو اس طرح محفوظ کیا جاتا ہے۔ مزید تشریح کے بغیر.

ایک بار جب آپ نے ایک فائل کھولی ہے، open() فنکشن آپ کو ایک فائل آبجیکٹ واپس کرے گا۔ ان فائل آبجیکٹ کے طریقے ہیں جیسے read(), readline(), write(), tell()، اور seek(). اگرچہ کچھ فائل آبجیکٹ (یا فائل نما آبجیکٹ) میں یہاں درج کردہ طریقوں سے زیادہ طریقے ہیں، یہ سب سے عام ہیں۔ تمام فائل اشیاء کو فائل کے تمام طریقوں کو نافذ کرنے کی ضرورت نہیں ہے۔

ایک فائل کو لائن بہ لائن پڑھنا

پہلی مثال دو پروگرامنگ زبانوں - C اور C++ سے متاثر ہے۔ یہ شاید سب سے زیادہ بدیہی نقطہ نظر ہے - کا استعمال کرتے ہوئے فائل کو کھولیں۔ open() تقریب، فائل لائن بہ لائن پڑھیں کا استعمال کرتے ہوئے readline() طریقہ، اور پڑھنے کے فوراً بعد لائن کو آؤٹ پٹ کریں۔

یہاں استعمال میں ہے a while لوپ جو فائل سے مسلسل پڑھتا ہے جب تک کہ readline() طریقہ ڈیٹا کو واپس کرتا رہتا ہے۔ اگر فائل کا اختتام (EOF) تک پہنچ گیا ہے۔ while لوپ رک جاتا ہے اور فائل آبجیکٹ بند ہو جاتا ہے، دوسرے پروگراموں کے استعمال کے لیے وسائل کو آزاد کر دیتا ہے:


filename = "test.txt"

filehandle = open(filename, 'r')
while True:
    
    line = filehandle.readline()
    if not line:
        break
    print(line)


filehandle.close()

جیسا کہ آپ نے نوٹ کیا ہوگا، ہم نے اس مثال میں فائل کو واضح طور پر کھولا اور بند کیا ہے۔ اگرچہ ازگر کا ترجمان Python پروگرام کے عمل کے اختتام پر کھلی فائلوں کو خود بخود بند کر دیتا ہے، واضح طور پر فائل کو بند کر کے close() پروگرامنگ کا انداز اچھا ہے، اور اسے فراموش نہیں کیا جانا چاہیے۔

ایک بہتری کے طور پر، آسان تکرار کرنے والا پروٹوکول Python 2.3 میں متعارف کرایا گیا تھا۔ یہ آپ کو آسان بنانے کی اجازت دیتا ہے۔ readline لوپ:


filename = "test.txt"
for line in open(filename, 'r'):
    print(line)

یہاں استعمال میں ہے a for کے ساتھ مجموعہ میں لوپ in تکرار کرنے والا موجودہ لائن کی مدد سے شناخت کی جاتی ہے۔ in iterator، فائل سے پڑھتا ہے، اور اس کا مواد آؤٹ پٹ ہوتا ہے۔ stdout. Python آپ کے لیے فائل کو کھولنے اور بند کرنے کا احاطہ کرتا ہے جب یہ دائرہ کار سے باہر ہو جاتی ہے۔ غیر موثر ہونے کے باوجود، یہ آپ کو فائل ہینڈلز سے مزید نمٹنے کی ضرورت نہیں دیتا ہے۔

بدقسمتی سے، اوپر دیا گیا کوڈ کم واضح ہے اور فائل کو بند کرنے کے لیے Python کے اندرونی کوڑے کو جمع کرنے پر انحصار کرتا ہے۔

Python 2.5 میں متعارف کرایا گیا۔ with کمانڈ پورے عمل کو اور بھی زیادہ گھیر لیتی ہے، اور اسکوپڈ کوڈ بلاک میں صرف ایک بار فائلوں کو کھولنے اور بند کرنے کو ہینڈل کرتی ہے۔


filename = "test.txt"
with open(filename, 'r') as filehandle:
    for line in filehandle:
        print(line)

کا مجموعہ with بیان اور open() کمانڈ صرف ایک بار فائل کو کھولتا ہے۔ کامیاب ہونے کی صورت میں for لوپ کو عمل میں لایا جاتا ہے، اور لائن کا مواد پرنٹ کیا جاتا ہے۔ stdout.

مزید برآں، کا استعمال with بیان کا ایک ضمنی اثر ہے. اندرونی طور پر، ازگر کا ترجمان ایک تخلیق کرتا ہے۔ try-finallyفائل سے پڑھنے کو سمیٹنے کے لیے بلاک کریں۔ مندرجہ ذیل مثال سے پتہ چلتا ہے کہ بنیادی طور پر پائتھون میں اندرونی طور پر کیا ہو رہا ہے۔ with کوڈ بلاکس:

try:
    filehandle = open(filename, 'r')
    
finally:
    filehandle.close()

لکیروں کے ٹکڑوں کے طور پر فائل کو پڑھنا

اب تک، ہم نے ایک فائل لائن پر عمل کیا ہے۔ یہ بڑی فائلوں کے لیے سست ہے اور ایک ہی وقت میں متعدد لائنوں کو پڑھ کر بہتر کیا جا سکتا ہے۔ اس کو حاصل کرنے کے لیے، islice() سے طریقہ itertools ماڈیول کھیل میں آتا ہے۔ نیز، یہ ایک تکرار کرنے والے کے طور پر کام کرتا ہے اور ڈیٹا کا ایک حصہ واپس کرتا ہے جس پر مشتمل ہوتا ہے۔ n لائنیں فائل کے آخر میں، نتیجہ چھوٹا ہو سکتا ہے، اور آخر میں، کال ایک خالی فہرست لوٹائے گی:

from itertools import islice

filename = "test.txt"

number_of_lines = 5

with open(filename, 'r') as input_file:
    lines_cache = islice(input_file, number_of_lines)
   
    for current_line in lines_cache:
        print (current_line)

فائل سے مخصوص لائن پڑھنا

اوپر دکھائے گئے طریقوں کو استعمال کرتے ہوئے ہم دیگر مفید اعمال بھی انجام دے سکتے ہیں، جیسے فائل سے مخصوص لائن پڑھنا۔ ایسا کرنے کے لیے، ہم ایک کاؤنٹر کا استعمال کرتے ہیں اور فائل کے ذریعے تکرار کرتے ہوئے جب ہم اس پر آتے ہیں تو مناسب لائن پرنٹ کرتے ہیں:


filename = "test.txt"

line_number = 3
print (f"line {line_number} of {filename} is: ")

with open(filename, 'r') as filehandle:
current_line = 1
    for line in filehandle:
        if current_line == line_number:
            print(line)
            break
        current_line += 1

یہ سمجھنے میں آسان ہونا چاہیے، لیکن یہ پچھلی مثالوں سے تھوڑا طویل ہے۔ کا استعمال کرتے ہوئے اسے مختصر کیا جا سکتا ہے۔ linecache ماڈیول.

مندرجہ ذیل مثال سے پتہ چلتا ہے کہ کوڈ کو کس طرح آسان بنایا جائے۔ getline() طریقہ اگر درخواست کردہ لائن نمبر فائل میں درست لائنوں کی حد سے باہر ہے، تو پھر getline() طریقہ اس کے بجائے ایک خالی تار لوٹاتا ہے:


import linecache

filename = "test.txt"

line_number = 3

line = linecache.getline(filename, line_number)
print (f"line {line_number} of {filename}:")
print (line)

پوری فائل کو ایک ساتھ پڑھنا

آخری لیکن کم از کم ہم پچھلی مثال سے بہت مختلف کیس دیکھیں گے - ایک ہی بار میں پوری فائل کو پڑھنا۔

ذہن میں رکھیں کہ زیادہ تر معاملات میں آپ کے پاس پوری فائل کو پڑھنے کے لیے کافی میموری ہونی چاہیے، کیونکہ کریکٹر زیادہ جگہ نہیں لیتے ہیں، لیکن بڑی فائلوں سے تھک جاتے ہیں۔ مندرجہ ذیل مثال کا ایک مجموعہ استعمال کرتا ہے with بیان، اور read() طریقہ اس صورت میں، ہم استعمال کریں گے read() فائل کے مواد کو ڈیٹا سٹریم کے طور پر لوڈ کرنے کے لیے:

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.read()
    print (filecontent)

ازگر بھی پیش کرتا ہے۔ readlines() طریقہ، جس کی طرح ہے readline() پہلی مثال سے طریقہ. اس کے برعکس میں read()، فائل کا مواد ایک فہرست میں محفوظ کیا جاتا ہے، جہاں مواد کی ہر سطر ایک آئٹم ہے:


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.readlines()
    for line in filecontent:
        print (line)

جبکہ readlines() فائل کے مواد کو اس وقت تک پڑھے گا جب تک کہ یہ EOF کو نہ مارے، ذہن میں رکھیں کہ آپ مواد کی مقدار کو بھی فراہم کر کے پڑھ سکتے ہیں sizehint پیرامیٹر، جو پڑھنے کے لیے بائٹس کی تعداد ہے۔

نتیجہ

ہمیشہ کی طرح، فائل کے مواد کو پڑھنے کے ایک سے زیادہ طریقے ہیں۔ رفتار کے لحاظ سے، یہ سب ایک ہی زمرے میں کم و بیش ہیں۔ آپ کے لیے کون سا حل بہترین کام کرتا ہے اس کا انحصار آپ کے مخصوص استعمال کے معاملے پر ہے۔ ہمارے خیال میں یہ دیکھنا کافی مددگار ہے کہ کیا ممکن ہے اور پھر اس حل کا انتخاب کرنا جو بہترین موزوں ہو۔

اگرچہ Python فائلوں کو پڑھنے کے عمل کو بہت آسان بناتا ہے، لیکن یہ اب بھی بعض اوقات مشکل بن سکتا ہے، ایسی صورت میں میں آپ کو مشورہ دوں گا کہ اس پر ایک نظر ڈالیں۔ ازگر کی سرکاری دستاویزات مزید معلومات کے لئے.

ٹائم اسٹیمپ:

سے زیادہ Stackabuse