পাইথনে প্রয়োজনীয় `ওপেন () with দিয়ে কোনও ফাইল খোলার পরে কি বন্ধ করা হচ্ছে? [বন্ধ]


9

আমার আগের প্রশ্নটি সম্পর্কে , আমি লক্ষ্য করেছি যে open()ফাংশনটি ব্যবহার করা উভয় উত্তরে, ফাইলটি বন্ধ করার কোনও উল্লেখ নেই।

আমি পড়েছি যে এটি করা ভাল অনুশীলন, তবে আসলে এটির কোনও দরকার আছে কি? এটি কি কেবল অপ্রয়োজনীয় কোড?

ফাইলটি কি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়?


1
with open (file_name, ...) as variable:close()আপনি এই কোডটি ব্লকটি ছাড়ার সাথে সাথেই স্বয়ংক্রিয়ভাবে পদ্ধতিটি শুরু করে।
বাইট কমান্ডার


@ বাইটকম্যান্ডার এই প্রশ্নটিকে 'সমাধান' করার জন্য আপনি কি উত্তর হিসাবে আপনার মন্তব্য দিতে চান?
টেলমেউ কেন

1
ইন python3, ফাইলটির আর কোনও রেফারেন্স না থাকলে স্বয়ংক্রিয়ভাবে আবর্জনা ফেলা হবে।
জ্যাকব Vlijm

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

উত্তর:


9

ফাইল কখন বন্ধ হবে?

যেহেতু আমরা শিখতে পারি স্পষ্টভাবে ফাইলগুলি বন্ধ করা কি গুরুত্বপূর্ণ? (স্ট্যাকওভারফ্লো) , পাইথন ইন্টারপ্রেটার নিম্নলিখিত ক্ষেত্রে ফাইলটি বন্ধ করে দেয়:

  • আপনি কোনও ব্লক রেখে ম্যানুয়ালি close()কোনও fileঅবজেক্টের পদ্ধতিটিকে স্পষ্টভাবে বা স্পষ্টভাবে অনুরোধ করছেন with open(...):। এটি অবশ্যই সর্বদা এবং যেকোন পাইথন বাস্তবায়নে কাজ করে।
  • fileঅবজেক্ট এর শেষ রেফারেন্স মুছে গিয়েছে এবং সেইজন্য বস্তুর গার্বেজ কালেকটর দ্বারা প্রক্রিয়াকৃত হয়। এটি কোনও ভাষা বৈশিষ্ট্য নয়, তবে কেবল সিপিথন বাস্তবায়নের একটি বিশেষ বৈশিষ্ট্য, সুতরাং বহনযোগ্যতার জন্য এটির উপর নির্ভর করবেন না!
  • পাইথন দোভাষী শেষ করে। এই ক্ষেত্রে এটি খোলার সাথে সাথে সমস্ত ফাইল হ্যান্ডলগুলি বন্ধ করে দেওয়া উচিত । পাইথন 3 এর কিছু পুরানো সংস্করণে একটি সতর্কতাও ছাপা হত যে আপনার নিজের হাতে নিজেই এটি বন্ধ করা উচিত ছিল। তবে কোনও ক্র্যাশ কল্পনা করুন বা আপনি পাইথন দোভাষীকে জোর করে হত্যা করছেন এবং আপনি দেখতে পাবেন যে এটিও নির্ভরযোগ্য নয়।

সুতরাং শুধুমাত্র প্রথম (ম্যানুয়াল) পদ্ধতি নির্ভরযোগ্য!

কোনও ফাইল খোলা থাকলে কী হবে?

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

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

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


পাইথন 3 এর জন্য সম্পূর্ণ সত্য নয়!
জ্যাকব ভ্লিজম

@ জ্যাকবভিলিজম আপনি কি এটি ব্যাখ্যা করতে পছন্দ করবেন?
বাইট কমান্ডার

প্রশ্নের নীচে মন্তব্য দেখুন। আপনার উত্তরের লিঙ্কে "ভাল অনুশীলন নয়" সম্পর্কে উত্তরটি ২০১১ সাল থেকে পাওয়া যায় it যদি এটি কখনও python3উপস্থিত থাকে তবে সতর্কতার কোনও অস্তিত্ব নেই এবং উত্তরটি পুরানো। স্বয়ংক্রিয় আবর্জনা সংগ্রহ কোনও কারণে বিদ্যমান এবং পুরোপুরি কাজ করে। এটা করা হয়েছে বছর যেহেতু আমি ব্যবহার close()বিশেষভাবে। এটি কখনও না ব্যবহার করে কোনও একক ত্রুটিতে কখনও প্রবেশ করেনি।
জ্যাকব ভ্লিজম

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

1
@ জ্যাকবভিলিজম টিপটির জন্য ধন্যবাদ। : পি ফাইলটি তৈরি করার সময় আমার মেশিনটি ইতিমধ্যে ক্র্যাশ হয়েছে ... এর জন্য আমার পাইথনেরও প্রয়োজন হয়নি।
বাইট কমান্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.