() ফাংশন সন্ধান?


126

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

উত্তর:


232

সম্পর্কে seek()উদ্বিগ্ন হওয়ার মতো খুব বেশি কিছু নেই।

প্রথমত, ওপেন ফাইলের ওপরে অপারেট করার সময় এটি দরকারী।

এটি উল্লেখ করা গুরুত্বপূর্ণ যে এর বাক্য গঠনটি নিম্নরূপ:

fp.seek(offset, from_what)

fpআপনি যে ফাইল পয়েন্টারটির সাথে কাজ করছেন তা কোথায় ; offsetমানে আপনি কত পদে পদে চলে যাবেন; from_whatআপনার রেফারেন্স পয়েন্ট সংজ্ঞায়িত:

  • 0 : এর মানে হল আপনার অবগতির বিন্দু শুরুতে ফাইলের
  • 1 : এর মানে হল আপনার অবগতির বিন্দু বর্তমান ফাইল অবস্থান
  • 2 : মানে আপনার রেফারেন্স পয়েন্টটি ফাইলের শেষ

বাদ দেওয়া থাকলে, from_what0 এ ডিফল্ট হয়।

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


115
দ্বিতীয় প্যারামিটারটি ব্যাখ্যা, যদিও আমি যোগ করতে যে আপনি সম্ভবত ধ্রুবক ব্যবহার করা উচিত চাই জন্য +1 os.SEEK_SET, os.SEEK_CURএবং os.SEEK_ENDপরিবর্তে যাদু সংখ্যার 0, 1এবং 2যথাক্রমে।
আর্টঅফ ওয়ারফেয়ার

সন্ধান অবস্থানটি অ্যারের সূচকের অনুরূপ ফাইলের সামগ্রীতে বাইট সূচক। এটিও আকর্ষণীয় যে আমরা যদি অ্যাপেনড মোডে 'এ' ফাইলটি খুলি তবে আমরা ফাইলের শুরুটি অনুসন্ধান করতে পারি না।
anilmwr

3
প্রকৃতপক্ষে অ্যাপেন্ড মোডের ক্ষেত্রে, আমরা fp.seek (0, 0) ব্যবহার করে ফাইলটির শুরুতে চেষ্টা করতে পারি, তবে আপনি যে ফাইলটিতে লেখার চেষ্টা করার সাথে সাথে অনুসন্ধানটি ফাইলটির শেষের দিকে পুনরায় সেট হয়ে যাবে এবং লিখিত সামগ্রীগুলি শেষে লেখা হবে seek ।
anilmwr

1
ধন্যবাদ - নতুন কিছু শিখেছে এবং কেবল এই স্পষ্টভাবে ব্যাখ্যা করা উত্তরগুলি পড়তে হয়েছিল
অ্যাডাম হিউজেস

ফাইলের শুরু থেকে সিকিং কল করার সময়, এটি কি আসলেই প্রতিটি সময় ফাইলের শুরু থেকে 'সন্ধান' শুরু করে?
থিও স্টিফু

40

আপনি যখন একটি ফাইল খুলবেন, সিস্টেমটি ফাইলের শুরুতে নির্দেশ করে। আপনার যে কোনও পড়া বা লেখা শুরু থেকেই ঘটবে। একটি seek()অপারেশন সেই পয়েন্টারটিকে ফাইলের অন্য কোনও অংশে নিয়ে যায় যাতে আপনি সেই জায়গায় পড়তে বা লিখতে পারেন।

সুতরাং, আপনি যদি পুরো ফাইলটি পড়তে চান তবে প্রথম 20 বাইট ছেড়ে seek(20)যান, আপনি যেখানে পড়া শুরু করতে চান সেখানে যেতে ফাইলটি খুলুন , তারপরে ফাইলটি পড়া চালিয়ে যান।

অথবা বলুন যে আপনি প্রতি 10 তম বাইট পড়তে চান, আপনি এমন একটি লুপ লিখতে পারেন যা seek(9, 1)(বর্তমান অবস্থানগুলির সাথে তুলনায় 9 বাইট এগিয়ে চলে), read(1)(একটি বাইট পড়ে) পুনরাবৃত্তি করে।


14
-1: এই উত্তরটি দ্বিতীয় প্যারামিটারটি ব্যাখ্যা করতে ব্যর্থ হয়েছে এবং প্রকৃতপক্ষে শব্দযুক্ত হিসাবে এটি দ্বিতীয় প্যারামিটারটি কত বাইট পড়ার নির্দেশ দেয় বলে মনে হচ্ছে।
আর্টঅফ ওয়ারফেয়ার

3

seekএর আশা ফাংশন একটি অফসেট বাইটে।

আসকি ফাইল উদাহরণ:

সুতরাং আপনার যদি নিম্নলিখিত লিখিত সামগ্রী সহ কোনও পাঠ্য ফাইল থাকে:

simple.txt

abc

নিম্নলিখিত চরিত্রটি বাদ দিয়ে আপনি 1 বাইট লাফিয়ে উঠতে পারেন:

fp = open('simple.txt', 'r')
fp.seek(1)
print fp.readline()
>>> bc

বাইনারি ফাইল উদাহরণ সংগ্রহের প্রস্থ:

fp = open('afile.png', 'rb')
fp.seek(16)
print 'width: {0}'.format(struct.unpack('>i', fp.read(4))[0])
print 'height: ', struct.unpack('>i', fp.read(4))[0]

দ্রষ্টব্য: একবার আপনি কল করলে আপনি readপঠন শিরোনামের অবস্থান পরিবর্তন করছেন, যা কাজটির মতো seek


0

স্ট্রিংগুলির জন্য, WHENCE ব্যবহার করতে ভুলবেন না: ফাইলের শুরুতে অবস্থানের জন্য f.seek (0) এবং ফাইলের শেষে অবস্থানের জন্য f.seek (লেন (চ) +1) ব্যবহার করুন। কোনও ফাইলের যে কোনও জায়গায় পড়তে / লিখতে ওপেন (ফাইল, "আর +") ব্যবহার করুন। আপনি যদি "a +" ব্যবহার করেন তবে আপনি কার্সারটি যেখানেই থাকুন না কেন আপনি কেবল ফাইলের শেষে লিখতে (সংযোজন) করতে সক্ষম হবেন।


আপনি ফাইল বা স্ট্রিং সম্পর্কে কথা বলছেন?
র‌্যালফ্রেডল

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