Skip to content
Home » மலைப்பாம்பு மொழி 34 – இருமம்(Binary) கோப்புகள்

மலைப்பாம்பு மொழி 34 – இருமம்(Binary) கோப்புகள்

எழுத்து வடிவ கோப்புகளைத் தொடர்ந்து இவ்வாரம் இருமக் கோப்புகளைக் காண இருக்கிறோம். படங்கள், ஆடியோ, காணொளி, எழுத்து வடிவ தரவுகள் உள்ளிட்டவற்றைச் சேமிக்க இ.கோப்புகள் பயன்படுகின்றன. ஆனால் அவ்வாறு சேமிக்கப்படும் தரவுகளை மற்ற வகை கோப்புகளைப் போல எளிதில் திறந்து பார்க்க இயலாது. அப்படியே திறந்தாலும் மனிதர்களால் புரிந்துகொள்ள இயலாத வடிவங்களில் குறியீடுகளாகத் தரவுகள் இடம்பெற்றிருக்கும். இவ்வளவு கஷ்டப்பட்டு எதற்காக ஒரு இ.கோப்பினை உருவாக்க வேண்டும்?

தரவுகள் கணினியின் மெமரியில் எவ்வாறு இடம்பெற்று இருக்குமோ, அதே வடிவத்தில் இ.கோப்பில் சேமிக்கப்படும். இந்த காரணத்தால் இ.கோப்புகள் கணினியில் தனக்காக மிகக் குறைவான இடங்களையே எடுத்துக்கொள்கின்றன. அளவில் சிறியதாக இருப்பதால் தரவுகளை எழுதவும், அவற்றைத் திரும்பப் பெறவும் எடுத்துக் கொள்ளப்படும் நேரம் பெருமளவுக்குக் குறைக்கப்படுகிறது. கணினிகளுக்கு இடையே பரிமாறிக்கொள்ள ஏற்ற ஒன்று என்ற பெயரினையும் இ.கோப்புகள் பெற்றிருக்கின்றன.

திறந்து பார்த்தால் புரியாத ஒன்றை எதற்காக உருவாக்க வேண்டும்?

நல்ல கேள்வி தான். இருமக் கோப்புகளைத் திறக்க அதற்கே உண்டான பிரத்தியேக செயலிகள் தேவைப்படுகின்றன. நம் கதையில் செயலிகள் அல்ல, நிரலே போதுமானது. ஆக, இ.கோப்புகளைத் திறந்து அதன் தரவுகளைப் புரிந்துகொண்டு, பிறகு அவற்றைக் கையாள நிரல் ஒன்றே தீர்வு. இதையே எளிமையாகச் சொல்ல வேண்டுமென்றால், நிரலின் மூலமாக மட்டுமே இ.கோப்புகளின் தரவுகளை(மனிதர்கள் புரிந்துகொள்ளும் வகையில்) பெற இயலும்.

எழுத்து வடிவ கோப்புகளை .txt, .docx உள்ளிட்ட கோப்பு நீட்டிப்புகளைப் பயன்படுத்திச் சேமித்ததை போல, இ.கோப்புகளுக்கு .bin, .exe, .dat, .pkl போன்றவற்றைப் பயன்படுத்தலாம், இவ்வகை நீட்டிப்புகள் குறிப்பிட்ட ஒன்றை இ.கோப்பாக விண்டோஸ் இயங்குதளத்திற்கு அறிமுகப்படுத்துகின்றன.

இனி நிரல்கள்.

நிரல் 1: ஒரு இ.கோப்பினை உருவாக்குதல்

எழுத்து வடிவ கோப்புகளை உருவாக்கி, கையாள எந்தவொரு தொகுப்பும் நமக்குத் தேவைப்படவில்லை. ஆனால் இ.கோப்புகளுக்குக் கட்டாயம் pickle என்ற தொகுப்பினை நிரலுக்கு இறக்குமதி செய்தே ஆகவேண்டும். காரணம் மனிதர்களுக்குப் புரியும் வடிவங்களில் உள்ள தரவுகளைக் கணினிக்கும்(serialization), கணினிக்கு மட்டுமே உரித்தான வடிவத்தை மனிதனுக்கும்(deserialization) மாற்றித்தரும் வேலையை இரண்டு மு.வ.செயல்பாடுகள் செய்து தருகின்றன. அவை இரண்டும் pickle தொகுப்பிற்கு உள்ளே கிடப்பதால், அதை இறக்குமதி செய்ய வேண்டிய கட்டாயம் ஏற்படுகிறது.

data என்ற அடையாளங்காட்டியில் சேமிக்கப்பட்டிருக்கும் பட்டியலை ஒரு இ.கோப்பில் எழுதி அவற்றைத் திரும்பப் பெறுவது தான் இந்நிரலின் நோக்கம். with முதன்மை சொல்லின் மூலம் “data.pkl” எனும் இ.கோப்பினை “wb” செயல் வகையின் அடிப்படையில் உருவாக்கியிருக்கிறோம்.
எழுத்து வடிவ கோப்புகளில் பயன்படுத்தப்பட்ட அதே செயல் வகைகளை ‘b’ எனும் எழுத்தை மட்டும் சேர்த்து இ.கோப்புகளில் பயன்படுத்தலாம். ‘b’ என்பது பைனரியை குறிக்கிறது.

இப்போது dump() மு.வ.செயல்பாட்டின் மூலம், ஏற்கனவே உருவாக்கப்பட்ட பட்டியலை இ.கோப்பில் எழுதுகிறோம். எதை எழுத வேண்டும்? எங்கே எழுத வேண்டும் எனும் இரண்டு அளவுருக்களை dump()ற்கு அளவுருக்களாக அனுப்பிவைக்க வேண்டும்.

அடுத்ததாக எழுதப்பட்ட பட்டியலின் தரவுகளைப் பெற்று அச்சிடுகிறோம். இதற்காக இ.கோப்பினை “rb” செயல் வகையின் அடிப்படையில் மீண்டும் திறக்கிறோம். இம்முறை தரவுகளை நிரலுக்குக் கொண்டுவர load() செயல்பாடு பயன்படுகிறது. எளிமையாகக் கோப்பு சுட்டிக்காட்டியை மட்டும் load()ற்கு தந்தால் போதுமானது, அதன் தரவுகள் நிரலை அடைந்துவிடும்.

வெளியீடு:

நிரல் 2: இ.கோப்பினில் எழுதுதல்

இரண்டு புதிய விஷயங்கள் இந்நிரலில் இடம்பெற்றுள்ளன. முதலாவது, bytes()ன் பயன்பாடு. தரவுகளை மாற்ற இயலாத ஒன்றாக மாற்றி இருமமாக சேமிக்க ஏற்றத்தக்க வகையில் பைட்டுகளாக ஆக்கும் பணியைச் செய்கிறது bytes(). இரண்டாவது write() செயல்பாடு, பெயருக்கு ஏற்ற வேலையைச் செய்கிறது. bytes() மாற்றித்தரும் தரவுகளை இ.கோப்பினில் எழுதும் பணியை write() முன்னெடுக்கிறது. ஒவ்வொரு நிரலிலும், கோப்புகளின் செயல்வகையின் மீது ஒரு கண் வைத்துக்கொள்ளுங்கள். எழுதுவதற்காக ஒரு கோப்பினை உருவாக்குகிறோம், எனவே “wb”.

நிரல் 3: இ.கோப்பினை வாசித்தல்

எழுதியதை இந்நிரலுக்குக் கொண்டுவந்து அச்சிடுகிறோம். எழுதியதை வாசிக்க வேண்டும் இல்லையா? ஆகவே read() எனும் செயல்பாடு பயன்படுத்தப்பட்டு இருக்கிறது. எந்த அளவுருவையும் நாம் குறிப்பிடாத காரணத்தால், ஒட்டுமொத்த தரவுகளும் வாசிக்கப்பட்டுவிட்டன. உங்களுக்குத் தேவைப்படும் பட்டுகளின் எண்ணிக்கையை மட்டும் read()ற்கு அளவுருவாக அனுப்பி வைத்தால், அதற்கு ஏற்ப மட்டும் தரவுகள் நிரலுக்குக் கொண்டு வரப்படும்.

நிரல் 4: இ.கோப்பின் தரவுகளோடு பின்னொட்டுதல்

“wb” செயல் வகையில் இருக்கும் சிக்கல் உங்களுக்குத் தெரியும் தானே? ஒவ்வொருமுறையும் நிரல் இயக்கப்படும் போதும் புதிதாகக் கோப்பு உருவாக்கப்பட்டு அதில் தரவுகள் எழுதப்படும். எனில், முந்தைய தரவுகள் அனைத்தும் அழிக்கப்பட்டு மீண்டும் அவையே புதிது போல எழுதப்படுகின்றன.

இச்சிக்கலைச் சரி செய்யத்தான் “ab” பயன்படுகின்றது. ஏற்கனவே இருக்கும் கோப்பினில் இறுதிக்குச் சென்று, நிரல் அனுப்பும் தரவுகளைச் சேமிக்கிறது. இதனால் பழைய தரவுகளுக்கு எந்தவொரு சேதாரமும் இல்லை.

நிரல் 5: ஏற்கனவே இருந்தால் பிழை

“xb” என்ற செயல் வகையைக் களத்தில் இறக்கியிருக்கிறோம். ஒரு இ.கோப்பின் பெயரில் அதுவரைக்கும் எதுவும் உருவாக்கப்படவில்லை என்றால் தப்பித்தோம், “xb” சமர்த்தாக அதை உருவாக்கித்தரும். ஒருவேளை ஏற்கனவே இருக்கும் பெயரில் மீண்டும் ஒரு இ.கோப்பினை உருவாக்க முயல்வது “xb”க்கு தெரிந்தால் அவ்வளவுதான். “பிழை! ஆமாம் பிழை!”.

“wb”க்கும் “xb”க்கும் என்ன வேறுபாடு என்று யோசிப்பது ஒரு நல்ல விளையாட்டு.

நிரல் 6: இ.கோப்பினில் எழுதி வாசித்தல்

“wb+” என்றால் முதலில் எழுதி பிறகு அவற்றை வாசிப்பது. இதில் மிக முக்கியமாகக் கவனிக்க வேண்டியது file.seek(0) என்னும் வரியைத்தான். அது ஏன் தரவுகளை எழுதியபிறகு அவ்வரி வருகிறது என்று யோசித்தீர்களா? தரவுகளை எழுதி முடித்தபிறகு கோப்பில் நிலை காட்டி இறுதியில் தான் இருக்கும் இல்லையா?

கவிதையின் கடைசி வரியை எழுதி முடித்த கணம் உங்கள் பார்வை அதன் இறுதியில் தான் இருக்கும் இல்லையா? இப்போது கவிதையை வாசிக்க உங்கள் பார்வையை முதல் வரிக்கு நகர்த்தியாக வேண்டும். நிரலுக்கும் இது அப்படியே பொருந்தும்.

தரவுகளை எழுதிய பிறகு, அதை வாசிக்க நிலை காட்டியைக் கோப்பின் தொடக்கத்திற்கு நகர்த்தியாக வேண்டும். இவ்வேலையைத் தான் file.seek(0) செய்கிறது.

நிரல் 7: இ.கோப்பினில் வாசித்து எழுதுதல்

எழுதி வாசிக்க ஒரு செயல் வகை இருக்கும்போது, வாசித்து எழுத மற்றொன்று இருந்தால் என்ன குறைந்துவிடப் போகிறது?

நிரல் 8: இ.கோப்பினில் தரவுகளைத் தேடுதல்

“rb” செயல் வகையின் அடிப்படையில் இ.கோப்பினைத் திறந்து, read() செயல்பாட்டின் மூலம் ஒட்டுமொத்த தரவுகளையும் பெற்று, அவற்றில் குறிப்பிட்ட தரவுகள் இடம்பெற்றுள்ளனவா என்பதை அறிந்து அதன் முடிவுகளை அச்சிட்டு இருக்கிறோம்.

நிரல் 9: இ.கோப்பின் தரவுகளைப் புதுப்பித்தல்

இ.கோப்பினில் எழுதப் பட்டியல் தரவு வகையைப் பயன்படுத்தியிருந்தது நினைவிருக்கலாம். முன்னோக்கிய குறியீட்டு எண்ணைப் பயன்படுத்தி அதன் மதிப்பைப் புதுப்பித்து இருக்கிறோம். வாழ்த்துகள்! நிரலில் மாற்றங்களைச் செய்து விட்டீர்கள்!, இப்போது அதை இ.கோப்பினில் எழுதிவிட்டால் முடிந்தது வேலை. write() செயல்பாடு அதைச் சாத்தியமாக்குகிறது.

நிரல் 10: இ.கோப்பினை அழித்தல்

os என்ற தொகுப்பினை நிரலுக்கு இறக்குமதி செய்து, குறிப்பிட்ட பெயரில் இ.கோப்பு இருந்தால் அதை முழுமையாக அழிக்கிறோம், இ.கோப்பு இல்லாது இருக்கும்பட்சத்தில் அத்தகவலைப் பயனருக்குத் தெரிவிக்கிறோம்.

0

இதுவரை பார்த்தவை யாவும் துண்டு துண்டான அறிவு மட்டுமே. ஒரு பிரச்சனைக்கு நிரலின் மூலம் தீர்வு காணும்போது மட்டுமே அந்த அறிவு முழுமை பெறுகிறது. புத்தகங்களைப் பராமரிக்க ஒரு இ.கோப்பு உருவாக்க முடியுமா?

குறிப்பு: ஒரே திரை சொட்டாகத் தரும் பட்சத்தில் எழுத்துக்களின் அளவு மிகவும் சுருங்கிவிடுகிறது. ஆகவே பின்வரும் நிரலைப் பகுதி பகுதியாகப் பிரித்துத் தந்திருக்கிறோம் . “Dry Run” அடிப்படையில் அலசி ஆராய்ந்து பாருங்கள்.

பகுதி 1

பகுதி 2

பகுதி 3

பகுதி 4

பகுதி 5

(தொடரும்)

பகிர:
ரிஷிகேஷ் ராகவேந்திரன்

ரிஷிகேஷ் ராகவேந்திரன்

நாமக்கல் மாவட்டம் இராசிபுரத்தை அடுத்த புதுப்பாளையம் என்னும் கிராமத்தைச் சேர்ந்தவர். தொழில்நுட்பத் துறை சார்ந்து தொடர்ந்து எழுதிவருபவர். இவர் எழுதிய ‘தமிழ் ராக்கர்ஸ் தோற்றமும் மறைவும்‘ என்னும் மின்னூல் பரவலான கவனத்தைப் பெற்றது. ரூபியா ரிஷி என்ற பெயரில் புனைவுகள் எழுதி வருகிறார்.View Author posts

பின்னூட்டம்

Your email address will not be published. Required fields are marked *