இரண்டு எண்களைப் பயனரிடமிருந்து பெற்று, அவற்றில் எது பெரியது என்பதைக் கண்டறிந்து அச்சிடுகிறது நிரல். மேலும் உள்ளீடு-செயல்முறை-வெளியீடு என்ற அடிப்படையில் சமர்த்தாக வேலையை முடித்துத் தந்துவிட்டு தன் ஊரைப்பார்த்துக் கிளம்புகிறது. இப்போது சில எளிய கேள்விகள், பயனர் தந்த அவ்விரு எண்களின் நிலையென்ன? அவை கணினியில் சேமிக்கப்படுகிறதா இல்லையா?
நிரல் இயங்கும்போது தரப்படும் தரவுகள் கணினியின் இடையகத்தில்(buffer) தற்காலிகமாகச் சேமிக்கப்படும். நிரல் இயங்கும் அந்த குறிப்பிட்ட காலத்திற்கு மட்டும் ஈசல் போல உயிர்வாழும். இந்த காரணத்தினால் தான் ஒவ்வொரு முறையும் நீங்கள் நிரலை இயக்கும்போதும், தரவுகளைப் புதிதாக மீண்டும் மீண்டும் தரவேண்டியிருக்கிறது. இது என்ன அநியாயம்? ஒரு நிரலால் நிரந்தரமாகத் தரவுகளைச் சேமித்து அதனோடு உறவாட முடியாதா என்றால் முடியும் என்று முறைக்காமல் சொல்லலாம்.
விண்டோஸ் உள்ளிட்ட இயங்குதளங்களில் நிறையக் கோப்புகளை(Files) அன்றாடம் பயன்படுத்துவோம் தானே, அதுபோல ஒரு கோப்பினை உருவாக்கி அதில் தரவுகளைச் சேமித்து நிரலோடு தொடர்புகொள்ளச் செய்யலாம்.
எப்படி?
இயங்குதளம் .txt, .docx, .pdf உள்ளிட்ட பல விதமான கோப்புகளை அங்கீகரிக்கும். இவற்றில் ஏதாவதொன்றை நிரலைக்கொண்டு உருவாக்கி அதில் தரவுகளை நிரந்தரமாகச் சேமிக்க முடியும்.
இதனால் என்ன நன்மைகள்?
1) தரவுகள் நிரந்தரமாகச் சேமிக்கப்படுகின்றன. இதன்மூலம் நிரலை எப்போதும் நம்பியிருக்காமல் தரவுகளால் தனித்து வசிக்க முடியும்.
2) தரவுகள் கோப்புகளில் நிரந்தரமாகச் சேமிக்கப்படும்போது, அதை மற்றவர்களோடு பகிர்ந்துகொள்வதும் எளிதாகிறது.
3) தரவுகள் ஓரிடத்தில் சேமிக்கப்படும்போது, அவற்றைப் பகுப்பாய்வு செய்து முடிவுகளை எட்டும் செயல்முறை சுலபமாகிறது.
4) கணினியின் முக்கிய செயல்பாடான ஏட்டிற்பதிதலை (logging) கோப்புகளைக்கொண்டு கையாளலாம்.
எழுத்துவடிவ கோப்புகளை உருவாக்க பைத்தான் என்ன மாதிரியான வாய்ப்புகளை வழங்குகிறது என்பது குறித்து இந்த அத்தியாயத்தில் விரிவாகப் பார்ப்போம்.
இதுவரை நீங்கள் எழுதிய நிரல் எங்கே சேமிக்கப்படுகிறது என்பது குறித்தெல்லாம் பெரிதாகக் கவனம் செலுத்தாமல் கூட இருந்திருக்கலாம். ஆனால் இனி கவனம் பத்தாது, மிகக் கவனமாக இருந்தாக வேண்டும். நிரல் மற்றும் அது தொடர்புகொள்ளவிருக்கும் கோப்புகள் இரண்டும் கணினியில் எங்கே இருக்கின்றன என்பதை நிரலாளர் அறிந்துவைத்திருப்பது அவசியம்.
நிரல் 1: கோப்பினை நிரலின் மூலம் உருவாக்குதல்
ஒரு கோப்பினை உருவாக்க இதுவரை நீங்கள் பின்பற்றிவந்த நுட்பங்கள் அனைத்தையும் மறந்துவிடுங்கள். இப்போது நாம் அந்த நடைமுறையை பைத்தானை வைத்துச் செய்ய இருக்கிறோம். முதல் வரியில், நிரல் தொடர்புகொள்ள இருக்கும் கோப்பு எங்கே சேமிக்கப்பட்டிருக்கிறது எனும் பாதை, சரமாக file_path எனும் அடையாளங்காட்டிக்கு ஒதுக்கப்பட்டிருக்கிறது. இரண்டாவது வரியில் open() எனும் மு.வ.செயல்பாட்டைப் பயன்படுத்தி இருக்கிறோம். அதில் கோப்பு சேமிக்கப்பட்டிருக்கும் பாதையை முதல் அளவுருவாகவும், அந்த கோப்பு எதற்காக இந்நிரலில் திறக்கப்படுகிறது என்பதற்கு உண்டான செயல்வகையையும் (file mode) குறிப்பிட்டிருக்கிறோம். ‘w’ என்றால் “write” என்று பொருள், ஆகக் குறிப்பிட்ட அந்த கோப்பு தரவுகளை எழுதுவதற்காகத் திறக்கப்படுகிறது. இரண்டாம் வரியைக்கொண்டிருக்கும் file எனும் அடையாளங்காட்டி, பைத்தானிலிருந்து கோப்பினை சுட்டுவதற்காகப் பயன்படுகிறது.
கோப்பு இன்னும் உருவாக்கப்படவே இல்லையே? பிறகு எப்படி அதில் எழுத முடியும்? திறக்க முடியும்?
குறிப்பு: ஒரு கோப்பு ‘w’ என்ற செயல்வகையில் திறக்கப்படும்பட்சத்தில்
1) குறிப்பிட்ட பெயர்கொண்ட அந்த கோப்பு ஏற்கனவே கணினியில் இடம்பெற்றிருந்தால், சப்தமில்லாமல் திறக்கப்படும்.
2) ஒருவேளை இல்லாமலிருந்தால் புதிதாக உருவாக்கப்பட்டுத் திறக்கப்படும்.
என் கணினியில் குறிப்பிட்ட கோப்புறையில்(Folder), Intro.txt என்ற கோப்பு இடம்பெற்றிருக்கவில்லை. எனவே புதிதாக உருவாக்கப்படுகிறது.
இதை எப்படிச் சரிபார்ப்பது?
நிரலை இயக்குவதற்கு முன்பும் பின்பும் file_demo எனும் கோப்புறையைத் திறந்து பாருங்கள். Intro.txt கோப்பினை புதிதாக நிரல் உருவாக்கியிருப்பது கண்கூடாகத் தெரியும்.
close() என்கிற மு.வ.செயல்பாடு பைத்தானுக்கும் கோப்புக்கும் இடையேயான தொடர்பை நிரலின் கடைசி வரியில் முடிவுக்குக் கொண்டுவருகிறது.
ஆக இந்நிரல் ‘w’ செயல்வகையைக்கொண்டு “D:\\file_demo\\Intro.txt” என்ற பாதையில் “Intro.txt” எனும் கோப்பினை உருவாக்கியுள்ளது.
நிற்க. கோப்புறை மற்றும் கோப்பின் பெயர்கள் என்னுடைய தேர்வு. இதை அப்படியே நீங்கள் பின்பற்றவேண்டிய கட்டாயமொன்றுமில்லை, உங்கள் விருப்பத்துக்கு நிரலுக்கு ஏற்றார்போல மாற்றிக்கொள்ளலாம்.
வெளியீடு:
நிரல் 2: கோப்பிலிருந்து தரவுகளைப் பெறுதல்
இந்நிரலை இயக்குவதற்கு முன்பு, உருவாக்கப்பட்டிருக்கும் “Intro.txt”ஐ திறந்து ஏதாவது தரவுகளை மின்னச்சு செய்துவிடுங்கள். காரணம் இந்நிரலில் ஒரு கோப்பைத் திறந்து அதிலிருந்து தரவுகளைப் பெறுவது குறித்துத்தான் பார்க்க இருக்கிறோம்.
முதல் வரியில் எந்த மாற்றமும் இல்லை. இம்முறை ‘r’ என்ற செயல்வகையைப் பயன்படுத்தியிருக்கிறோம். உங்கள் கணிப்பு சரிதான், ‘r’ என்றால் read. ஏற்கனவே உருவாக்கப்பட்ட ஒரு கோப்பினை, அதில் சேமிக்கப்பட்டிருக்கும் தரவுகளைப் பெறுவதற்காகத் திறக்கிறோம். read() மு.வ.செயல்பாடு கோப்பிலிருக்கும் அனைத்து தரவுகளையும் நிரலுக்குக் கொண்டுவந்து அதை சரமாக அச்சிடுகிறது.
வெளியீடு:
நிரல் 3: இல்லாத கோப்பினை திறக்க முற்படுதல்
‘r’ செயல்வகையின் அடிப்படையில் ஒரு கோப்பினை திறக்க முற்படுகிறோம். இங்கே ட்விஸ்ட் என்னவென்றால், அதுபோன்ற ஒரு கோப்பு கணினியில் எங்கேயும் இடம்பெறவில்லை.
என்ன நடந்திருக்கும்?
வெளியீடு:
குறிப்பு:
இதே நிரலை ஒரு சிறிய மாற்றம்செய்து இயக்கிப் பாருங்கள். ‘r’ என்பதை நீக்கிவிட்டு ‘w’ என்று தந்துபாருங்கள்.
இங்கே நாம் சில எளிய விதிகளைக் கற்க வேண்டியிருக்கிறது. ஒரு கோப்பு உருவாக்கப்படாமல் திறக்கப்பட்டால், நிரல் எப்படி எதிர்வினையாற்றும்? முதலில் அதன் செயல்வகை என்னவென்று பார்க்கும்
1) ‘w’ என்றால் உருவாக்கப்பட்டுத் திறக்கப்படும்
2) ‘r’ என்றால் தயவு தாட்சண்ணியமின்றி பிழை தோன்றும்
ஏன் இந்த பாரபட்சம்?
தரவுகளைச் சேமிக்க ஒரு கோப்பு(w) என்றால் வெண்சுவர் . ஒவ்வொரு முறையும் உருவாக்கி அதில் வண்ணங்கள் தீட்டுவதில் தவறில்லை. ஆனால் இல்லாத வெண்சுவரில்(r) எப்படி வண்ணங்களைப் பார்க்க முடியும்? அந்த தர்க்கம் தான் காரணம்.
நிரல் 4: கோப்பிலிருந்து ஒரு வரியை மட்டும் எடுத்து அச்சிடுதல்
readline() என்ற மு.வ.செயல்பாட்டிற்கு இந்நிரலில் அறிமுகம், அவர் நிரலிலிருந்து ஒரு வரியை மட்டும் எடுத்து அச்சிடுவார். அது எந்த வரி என்பது எப்படி தீர்மானிக்கப்படுகிறது? கோப்பில் நிலைகாட்டி(cursor) இடம்பெற்றிருக்கும் குறிப்பிட்ட அந்த வரி.
வெளியீடு:
நிரல் 5: கோப்பிலிருக்கும் அனைத்து வரிகளையும் பட்டியலின் உறுப்புகளாக மாற்றுதல்
readlines() என்ற மு.வ.செயல்பாட்டைப் பயன்படுத்தியிருக்கிறோம். கோப்பின் ஒவ்வொரு வரியையும் சர தரவு வகையாக மாற்றி, பிறகு அவற்றைப் பட்டியலின் உறுப்புகளாக மாற்றும் வேலையை இவர் செய்வார்.
வெளியீடு:
நிரல் 6: கோப்பில் தரவுகளைச் சேமித்தல்
எளிய நேரடியான நிரல். “Demo.txt” என்ற கோப்பினை உருவாக்கி அதில் இரண்டு வரிகளை எழுதி, சேமிக்கிறோம். இதைச் சாத்தியப்படுத்துவது writeline() எனும் மு.வ.செயல்பாடு. ஆக நாம் பயன்படுத்த வேண்டிய செயல்வகை ‘w’. ஒரு வரி எழுதப்பட்ட பிறகு, அடுத்த வரிக்குச் செல் என்னும் கட்டளையை ‘\n’ மூலமாகத் தருகிறோம்.
வெளியீடு:
நிரல் 7: பட்டியலின் உறுப்புகளைக் கோப்பில் சேமித்தல்
writelines() என்ற மு.வ.செயல்பாட்டை அறிமுகப்படுத்துகிறோம். இவர் ஒரு பட்டியலை அளவுருவாகப் பெற்று அதன் உறுப்புகள் ஒவ்வொன்றையும் கோப்பின் ஒரு வரியாக மாற்றித்தருவார்.
வெளியீடு:
நிரல் 8: கோப்பு நிலைகாட்டியைக் கையாளுதல்
ஒரு கோப்பு திறக்கப்படும்போது, நிலைகாட்டி முதல்வரியின் தொடக்கத்தில் இருக்கும். அதை நிரலாளர் தன் விருப்பத்துக்கு முன்னும் பின்னும் நகர்த்திக் கொள்ளலாம், seek() எனும் மு.வ.செயல்பாட்டைக் கொண்டு இதைச் சாத்தியப்படுத்தலாம். நிரல் திறக்கப்பட்டதும் தொடக்கத்தில் இருக்கும் நிலை காட்டியை ஒரு பத்து பைட்டுகள்(bytes) முன்னோக்கித் தள்ளி, அதிலிருந்து மீதமிருக்கும் தரவுகளை நிரலில் அச்சிடுகிறோம்.
முன்னோக்கி மட்டுமல்ல, பின்னோக்கியும் கூட நீங்கள் நிலை காட்டியை நகர்த்திக் கொள்ளமுடியும்.
வெளியீடு:
நிரல் 9: கோப்பு நிலைகாட்டியை அறிதல்
நிரலின் இயக்கத்தைப் பொறுத்து நிலைகாட்டி முன்னும் பின்னும் நகர்ந்துகொண்டே இருக்கும். எனில் அதன் நிலையை அறிவது எப்படி? வந்துவிட்டார் tell(). இவரை அழித்தால், நிலை காட்டியின் அப்போதைய நிலையை, அதாவது கோப்பில் எங்கே தொங்கிக்கொண்டிருக்கிறது எனும் பைட் விவரங்களைத் தருவார்.
வெளியீடு:
அடுத்தவாரம் கோப்பின் செயல்பாடுகளை விரிவாகப் பார்ப்போம்.
(தொடரும்)