অন্তর্নির্মিত খোলা ফাংশনটিতে মোড এ, এ +, ডাব্লু, ডাব্লু +, এবং আর + এর মধ্যে পার্থক্য?


608

বিল্ট-ইন পাইথন মধ্যে খোলা ফাংশন, মোড মধ্যে সঠিক পার্থক্য কি w, a, w+, a+, এবং r+?

বিশেষত, ডকুমেন্টেশনের মাধ্যমে বোঝা যায় যে এগুলি সমস্ত ফাইলটিতে লেখার অনুমতি দেবে এবং বলেছে যে এটি "সংযোজন", "রচনা" এবং "আপডেট করার জন্য" ফাইলগুলি বিশেষভাবে খোলে, তবে এই শর্তগুলির অর্থ কী তা ব্যাখ্যা করে না।


11
আপনার প্রদত্ত লিঙ্কটি হুবহু মানগুলি সংজ্ঞায়িত করে। আপনি প্রদত্ত লিঙ্কটি সম্পর্কে কোন অংশটি আপনি দেখতে বা বুঝতে পারবেন না? আপনি কি লিঙ্কটি সম্পর্কে বুঝতে পারেন নি তা বোঝাতে আপনার প্রশ্নটি পরিষ্কার করতে পারেন?
এস.লোট


2
এমন কোনও সাধারণ এবং একক ডক নেই যা ব্যাখ্যা করে যে + চিহ্নটির অর্থ কী?
চার্লি পার্কার

উত্তর:


740

খোলার মোডগুলি হ'ল সি স্ট্যান্ডার্ড লাইব্রেরি ফাংশনের মতো fopen()

বিএসডি fopenম্যানপেজ নীচে তাদের সংজ্ঞা দেয়:

 The argument mode points to a string beginning with one of the following
 sequences (Additional characters may follow these sequences.):

 ``r''   Open text file for reading.  The stream is positioned at the
         beginning of the file.

 ``r+''  Open for reading and writing.  The stream is positioned at the
         beginning of the file.

 ``w''   Truncate file to zero length or create text file for writing.
         The stream is positioned at the beginning of the file.

 ``w+''  Open for reading and writing.  The file is created if it does not
         exist, otherwise it is truncated.  The stream is positioned at
         the beginning of the file.

 ``a''   Open for writing.  The file is created if it does not exist.  The
         stream is positioned at the end of the file.  Subsequent writes
         to the file will always end up at the then current end of file,
         irrespective of any intervening fseek(3) or similar.

 ``a+''  Open for reading and writing.  The file is created if it does not
         exist.  The stream is positioned at the end of the file.  Subse-
         quent writes to the file will always end up at the then current
         end of file, irrespective of any intervening fseek(3) or similar.

3
আমি বিশ্বাস করি আপনি সি স্ট্যান্ডার্ড লাইব্রেরিতে
ফোপেন

14
দ্রষ্টব্য: পাইথন ভি 3 বেশ কয়েকটি অতিরিক্ত মোড যুক্ত করে। দস্তাবেজের লিঙ্ক
অ্যালেক্স

5
উল্লেখ্য wএবং w+উভয়ই করতে পারেনThe file is created if it does not exist
ওয়েই ইয়াং

4
Windows এ, bমোডে যোগ বাইনারি মোডে ফাইল খোলে, তাই সেখানে মত মোড আছে rb, wbএবং r+b। উইন্ডোজে পাইথন পাঠ্য এবং বাইনারি ফাইলগুলির মধ্যে পার্থক্য তৈরি করে; পাঠ্য ফাইলগুলিতে প্রান্তের অক্ষরের অক্ষরগুলি স্বয়ংক্রিয়ভাবে কিছুটা পরিবর্তিত হয় যখন ডেটা পড়া বা লেখা হয়।

6
আমি কি ঠিক বলতে পারি যে এটি +নিয়মিত কিছু না হলে স্বতন্ত্র কিছু করে না a, wবা r? নাকি আমি প্যাটার্নটি দেখতে ব্যর্থ? প্যাটার্নটি কী?
চার্লি পার্কার

507

আমি লক্ষ্য করেছি যে প্রতিবারই আমার আবার গুগলকে ফপেন করা দরকার, কেবলমাত্র মোডগুলির মধ্যে প্রাথমিক পার্থক্য কী তা নিয়ে একটি মানসিক চিত্র তৈরি করতে। সুতরাং, আমি ভেবেছিলাম পরের বার পড়ার জন্য একটি চিত্রটি আরও দ্রুত হবে। হতে পারে অন্য কেউ এটির সহায়কও খুঁজে পেতে পারেন।


3
aবিবরণ ভুল । লেখক সর্বদা শেষে অবস্থিত।
অ্যান্টি হাপালা

10
@ এবং আমি বিশ্বাস করি যে আন্টি সেই সম্পত্তিটির কথা উল্লেখ করছেন Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similarযা প্রাথমিক অবস্থানটি শেষের কথাটি বলার চেয়ে কিছুটা শক্তিশালী ।
jcai

8
@ চার্লিপার্কার যে মূলত দুটি ফাইল অপারেশন রয়েছে (পড়ুন, লিখুন)। মোড , মোড প্রাথমিকভাবে পড়ার জন্য নয় W , একটি লেখার জন্য প্রাথমিকভাবে হয়। এবং প্লাস চিহ্নটি একটি প্রদত্ত মোডের জন্য দ্বিতীয় অপারেশন সক্ষম করে (সহজভাবে বলেছে)।
জাইকোমন

22
উত্তরোত্তর জন্য: ছাঁটাই মানে প্রথম থেকেই ওভাররাইট করা।
মিন ট্রান

4
@ জিয়েকোমন আপনার মন্তব্যে আপনার সংক্ষিপ্তসারটি সম্ভবত এই মোডগুলির চারপাশে আমার মাথা পেতে চেষ্টা করার মধ্যে পড়া একমাত্র সবচেয়ে সহায়ক যেটি আমি এখন মনে করতে পারি! এই উত্তরের প্রবাহের চার্টটি দুর্দান্ত এবং নীচের উত্তরের টেবিলটি দুর্দান্ত, তবে যদি এই উত্তরগুলি (এবং অন্য কোথাও অন্যরা) এই সাধারণ বিন্দু দিয়ে শুরু করে এবং সেখান থেকে কাজ করে, তবে বিশদটি স্তব্ধ করতে আরও ভাল মানসিক কাঠামো সরবরাহ করতে সহায়তা করবে চালু. সূতরাং ধন্যবাদ. (আমি সম্ভবত স্প্যামির সীমান্তে এটি সচেতন, তবে আমি আপনার মন্তব্যটি স্বীকৃতি প্রাপ্য বলে মনে করেছি)
Tim

206

টেবিল আকারে একই তথ্য

                  | r   r+   w   w+   a   a+
------------------|--------------------------
read              | +   +        +        +
write             |     +    +   +    +   +
write after seek  |     +    +   +
create            |          +   +    +   +
truncate          |          +   +
position at start | +   +    +   +
position at end   |                   +   +

অর্থ যেখানে: (কেবল কোনও ভুল ব্যাখ্যা এড়াতে)

  • ফাইল থেকে পড়া - পড়ার অনুমতি রয়েছে
  • লিখুন - ফাইল লেখার অনুমতি আছে

  • এখনও উপস্থিত না থাকলে ফাইল তৈরি করা হয়

  • কাণ্ড - ফাইল খোলার সময় এটি খালি করা হয় (ফাইলের সমস্ত সামগ্রী মুছে ফেলা হয়)

  • শুরুতে অবস্থান - ফাইল খোলার পরে, প্রাথমিক অবস্থানটি ফাইলের শুরুতে সেট করা হয়

  • শেষে অবস্থানে - ফাইল খোলার পরে, প্রাথমিক অবস্থানটি ফাইলের শেষের দিকে সেট করা হয়

দ্রষ্টব্য: aএবং a+সর্বদা ফাইলের শেষে সংযোজন - যে কোনও seekচলন উপেক্ষা করে ।
BTW। কমপক্ষে আমার win7 / পাইথন 2.7 এর উপর আকর্ষণীয় আচরণ, নতুন ফাইলটি a+মোডে খোলার জন্য :
write('aa'); seek(0, 0); read(1); write('b')- দ্বিতীয়টি writeউপেক্ষা করা হবে
write('aa'); seek(0, 0); read(2); write('b')- দ্বিতীয় writeউত্থাপনIOError


10
কেন সেখানে কোনও "ফাইল উপস্থিত নেই যদি তা বিদ্যমান না থাকে? যদি এটি বিদ্যমান না থাকে তবে শুরুতে অবস্থান করুন, পড়া এবং লিখতে সক্ষম করুন"? এটি আমার পক্ষে সর্বাধিক সুস্পষ্ট ব্যবহারের ক্ষেত্র: আমি কোনও ফাইলে ডেটা সঞ্চয় করি। যদি ফাইলটি না থাকে তবে ত্রুটির পরিবর্তে এটি তৈরি করুন। যদি ফাইলটিতে ডেটা থাকে তবে আমি এগুলি সমস্ত উপরে থেকে পড়তে চাই, কিছু স্টাফ আপডেট করুন তারপরে পরবর্তী সময়টির জন্য 0 থেকে ফাইলটি পুরোপুরি পুনরায় লিখুন it আমি open(file,'a'); close(); open(file,'r+')এটি সম্পাদন করতে ব্যবহার করি ।
পিনহেড

2
এই প্রসঙ্গে "ছাঁটাই" এর অর্থ কী?
চার্লি পার্কার

3
@ চর্লিপার্কার এর অর্থ ফাইলটির সমস্ত সামগ্রী মুছে ফেলা হয়েছে (ফাইলটি ফাঁকা করে দেওয়া হয়েছে)
শিল্পকর্ম

1
আপনি একটি নোট যে সঙ্গে জুড়তে চাইতে পারেন aএবং a+লিখেছেন হবে সবসময় ফাইলের শেষে ঘটতে, এক ম্যানুয়ালি পয়েন্টার চলে আসে কিনা ব্যবহার নির্বিশেষে seek()
বালু

1
পাইথন 3 এর জন্য 'এক্স' অন্তর্ভুক্ত করতে, টেবিলটি আপডেট করার বিষয়ে কী বলা যায়?
নিকোস আলেকজান্দ্রিস

39

সি স্ট্যান্ডার্ড লাইব্রেরিতে ফোপেন ফাংশনের জন্য বিকল্পগুলি একই রকম :

w ইতিমধ্যে যা ছিল তা ওভাররাইট করে ফাইলটি কেটে ফেলা হয়

a ইতিমধ্যে যা ছিল তা জুড়ে ফাইলে সংযোজন করা হয়

w+ পড়া এবং লেখার জন্য খোলে, ফাইল কেটে ফেলা হয় তবে আপনাকে ফাইলটিতে কী লেখা হয়েছে তা আবার পড়তে দেয়

a+ আপনি উভয় ফাইল সংযোজন এবং এর বিষয়বস্তু পড়তে অনুমতি দেয়, সংযোজন এবং পড়ার জন্য খোলে


2
এই প্রসঙ্গে "ছাঁটাই" এর অর্থ কী? পুরানো ডেটা যদি কিছু থাকে তবে মুছে ফেলার অর্থ কি? বা আরও নির্দিষ্ট কিছু?
চার্লি পার্কার

3
@ চর্লিপারপারার: ​​সঠিক - এর অর্থ বিদ্যমান ফাইলের সমস্ত ডেটা বাদ দেওয়া হবে এবং আমরা এখন খালি ফাইলের শুরু থেকেই লেখা শুরু করি।
এলি কোর্টরাইট

9

আমি মনে করি ক্রস-প্ল্যাটফর্মের প্রয়োগের জন্য, অর্থাত্ সিওয়াইএ হিসাবে এটি বিবেচনা করা গুরুত্বপূর্ণ। :)

উইন্ডোজে, মোডে সংযুক্ত 'বি' ফাইলটি বাইনারি মোডে খোলে, সুতরাং 'আরবি', 'ডাব্লুবি', এবং 'আর + বি' এর মতো মোডগুলিও রয়েছে। উইন্ডোজে পাইথন পাঠ্য এবং বাইনারি ফাইলগুলির মধ্যে পার্থক্য তৈরি করে; পাঠ্য ফাইলগুলিতে প্রান্তের অক্ষরের অক্ষরগুলি স্বয়ংক্রিয়ভাবে কিছুটা পরিবর্তিত হয় যখন ডেটা পড়া বা লেখা হয়। পর্দার আড়ালে থাকা এই ফাইলটি ডেটা ফাইলের জন্য সংশোধন করা ASCII পাঠ্য ফাইলগুলির পক্ষে ঠিক আছে, তবে এটি জেপিইজি বা এক্সই ফাইলগুলিতে বাইনারি ডেটাগুলিকে দূষিত করবে। এই জাতীয় ফাইলগুলি পড়তে এবং লেখার সময় বাইনারি মোড ব্যবহার করতে খুব সাবধান হন। ইউনিক্সে, মোডে 'বি' যুক্ত করতে কোনও ক্ষতি হয় না, তাই আপনি সমস্ত বাইনারি ফাইলগুলির জন্য এটি প্ল্যাটফর্ম-স্বাধীনভাবে ব্যবহার করতে পারেন can

এটি পাইথন সফটওয়্যার ফাউন্ডেশন ২.7.x থেকে সরাসরি উদ্ধৃত হয়েছে ।


9

আপনি কেন মোড 'ডাব্লু +' বনাম 'ডাব্লু' ব্যবহার করবেন তা বোঝার চেষ্টা করে আমি এটিকে আঘাত করি। শেষ পর্যন্ত, আমি কিছু পরীক্ষা করেছি। মোড 'ডাব্লু +' এর জন্য আমি খুব বেশি উদ্দেশ্য দেখতে পাচ্ছি না, যেমন উভয় ক্ষেত্রেই ফাইলটি শুরু হওয়ার সাথে কাটা হয়েছে। তবে, 'ডাব্লু +' দিয়ে আপনি পিছনে চেয়ে লেখার পরে পড়তে পারেন। আপনি যদি 'ডাব্লু' দিয়ে কোনও পড়ার চেষ্টা করে থাকেন তবে এটি আইওআরর উত্থাপন করবে। মোড 'ডাব্লু +' দিয়ে সন্ধান না করা পঠন থেকে কোনও ফল পাওয়া যাচ্ছে না, যেহেতু আপনি যেখানে লিখেছেন সেখানে ফাইল পয়েন্টারটি থাকবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.