একটি ফাইলের প্রথম লাইন পড়ুন?


208

পাইথনের সাথে স্ট্রিং হিসাবে আপনি কোনও ফাইলের প্রথম লাইনটি কীভাবে পাবেন?


4
যদি আপনি ইতিমধ্যে ফাইলটি পড়েছেন ("একটি ফাইল পড়ার পরে"), আপনি ইতিমধ্যে প্রথম লাইনটি পড়েছেন! (ধরে নিলাম সেখানে কমপক্ষে একটি লাইন রয়েছে))
উইলিয়াম পার্সেল

3
মনে রাখবেন যে বর্তমানে যেমনটি কথিত প্রশ্নের উত্তর হয়েছে তার চেয়ে আলাদা অর্থ রয়েছে। "একটি ফাইল পড়ার পরে" অংশটি (যা সরিয়ে দেওয়া হয়েছে) অ্যাকাউন্টে নেওয়া হিসাবে কিছু উত্তর এখন নির্বোধ দেখাচ্ছে look
পিটার হানসেন

উত্তর:


354

.readline()পদ্ধতিটি ব্যবহার করুন ( পাইথন 2 ডক্স , পাইথন 3 ডক্স ):

with open('myfile.txt') as f:
    first_line = f.readline()

কিছু নোট:

  1. ডক্সে উল্লিখিত হিসাবে, এটি ফাইলের একমাত্র লাইন না হলে, ফিরে আসা স্ট্রিংটিতে f.readline()একটি পিছনের নিউলাইন থাকবে। আপনি f.readline().strip()নতুন লাইনটি সরাতে পরিবর্তে ব্যবহার করতে চাইতে পারেন।
  2. withবিবৃতি স্বয়ংক্রিয়ভাবে আবার যখন ব্লক প্রান্ত ফাইল বন্ধ করে।
  3. withবিবৃতি শুধুমাত্র পাইথন 2.5 এবং আপ কাজ করে, এবং পাইথন 2.5 আপনি ব্যবহার করতে হবেfrom __future__ import with_statement
  4. পাইথন 3 এ আপনার খোলার ফাইলটির জন্য ফাইল এনকোডিং নির্দিষ্ট করা উচিত। আরও পড়ুন ...

3
পাইথন 3 এ ফাইলটি ascii বা utf8 হয় তবে আপনাকে ফাইল এনকোডিং নির্দিষ্ট করতে হবে না। এবং যদি তা না হয় তবে পাইথন 2-তে কোডেক.ওপেনের কাছে আপনার এনকোডিংটি নির্দিষ্ট করা উচিত।
ইভপোক

2
@ এভপোক "পাইথন 3-এ যদি ফাইলটি ascii বা utf8 হয় তবে আপনাকে ফাইল এনকোডিং নির্দিষ্ট করতে হবে না" - যদি তা কেবল কঠোরভাবে সত্য হয়! বাস্তবতা কিছুটা অগোছালো; ডক্সে উল্লিখিত হিসাবে, ব্যবহৃত ডিফল্ট এনকোডিংটি প্ল্যাটফর্ম নির্ভর ( যখন অ্যাপাচি দিয়ে চালানো হবে mod_wsgi)।
মার্ক আমেরিকা


20
fline=open("myfile").readline().rstrip()

আমি এখানে খুঁজছিলাম। বিশেষত যেহেতু rstrip()নিউলাইন চরিত্রটি মুছে ফেলা হয়।
শশাঙ্ক সাওয়ান্ত

5
-1; এটি ফাইলটি বন্ধ করে না এবং যদি প্রথম লাইনে নতুন লাইনের চরিত্রের পাশাপাশি কোনও পেছনের সাদা স্থান থাকে তবে একটি ভুল ফলাফল দেয়।
মার্ক আমেরিকা

@ মার্কআমেরি: প্রকৃতপক্ষে, ফাইল হ্যান্ডেলটি কোনও ভেরিয়েবলের জন্য বরাদ্দ করা হয়নি, এটি এখনই আবর্জনা সংগ্রহ করা হয়, যা ফাইলটি বন্ধ করে দেয়। (যদিও, অবশ্যই একটি প্রসঙ্গ পরিচালক ব্যবহার করে গৃহীত সমাধানটি এখনও আরও ভাল))
acdr

@acdr আপনি যা বলছেন তা সিপথনের পক্ষে সত্য তবে অন্যান্য পাইথন বাস্তবায়নের জন্য নয় - উদাহরণস্বরূপ দেখুন পাইপাই আবর্জনা সংগ্রহের ডকস যা একটি নির্দিষ্ট আগ্রহের বিষয় হিসাবে উল্লেখ করেছে যে "ফাইলগুলি ... সুযোগের বাইরে চলে গেলে অবিলম্বে বন্ধ হয় না" । এই কারণে, এটি সাধারণত যুক্তিযুক্ত (যেমন স্ট্যাকওভারফ্লো . com/a/7396043/1709587 এ ) যে আপনি বর্ণিত আচরণের উপর নির্ভর করা খারাপ অভ্যাস।
মার্ক আমেরিকা


9

একটি খোলা ফাইলের শুরুতে ফিরে যেতে এবং তারপরে প্রথম লাইনটি ফিরতে, এটি করুন:

my_file.seek(0)
first_line = my_file.readline()

1
কেবল আরও ভাল বোঝার জন্য, এটি হবে "my_file.seek (0) লাইন = my_file.readline ()"
আলবার্তো পেরেজ

7
first_line = next(open(filename))

1
এটি কি ফাইলটিও বন্ধ করে দেয়?
অবল্টার

অবশেষে, পাইথন যখন ব্লকটি ছেড়ে যায়।
vy32

6

এখানে প্রচুর অন্যান্য উত্তর, তবে আপনি যে প্রশ্নের উত্তর চেয়েছিলেন তার উত্তর দেওয়ার জন্য (@ মার্কআমেরি গিয়ে মূল প্রশ্নটি সম্পাদনা করে অর্থ পরিবর্তিত করার আগে):

>>> f = open('myfile.txt')
>>> data = f.read()
>>> # I'm assuming you had the above before asking the question
>>> first_line = data.split('\n', 1)[0]

অন্য কথায়, আপনি যদি ইতিমধ্যে ফাইলটিতে পড়েছেন (যেমনটি আপনি বলেছেন), এবং মেমরির একটি বড় ডেটা আছে, তবে দক্ষতার সাথে এটি থেকে প্রথম লাইনটি পেতে, একবার নতুন লাইনের চরিত্রটিতে একটি বিভাজন () করুন শুধুমাত্র, এবং ফলাফল তালিকা থেকে প্রথম উপাদান নিতে।

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


8
যদি এটি একটি বড় ফাইল হয়, f.read () পুরো ফাইলটিকে মেমরিতে লোড করার চেষ্টা করবে যা ভাল ধারণা হবে না। বিকল্পটি হ'ল নতুন লাইন বা
ইওএফ-এর

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

2
আমি বিশ্বাস করি না যে আমি অর্থটি পরিবর্তন করেছি। পুরো ফাইলটি "পড়ার" পরে কোনও ফাইল থেকে প্রথম পংক্তিকে কীভাবে "পড়ুন" তা জিজ্ঞাসা করা বেশ অর্থহীন। যেমনটি, এটি আমার কাছে বেশ স্পষ্ট যে প্রশ্নকারীর অভিপ্রায়টি ধরে নেওয়া উচিত ছিল না যে এটি .read()প্রথমে বলা উচিত।
মার্ক আমেরিকা

@ মার্ক অ্যামেরি, প্রশ্নটি খারাপভাবে উচ্চারিত হয়েছিল ("বেশ অর্থহীন") তাই আপনি অভিপ্রায়টি অনুমান করেছিলেন ("আমার কাছে সুস্পষ্ট") এবং এটি মিলিয়ে দেওয়ার জন্য উচ্চারণ করেছেন। আমার ব্যাখ্যা পৃথক। স্পষ্টত যতক্ষণ না harpalss সুস্পষ্ট, সব আমরা মূল বাক্যে কথন প্লাস একটি উত্তর তিনি স্বীকার হয় (মানে ওই "চাইতে (0)") যা আমার পরিষ্কারভাবে দেখায় যে, তিনি করেছিলেন ইতিমধ্যে অন্তত প্রথম লাইন অতীত, ফাইলের মধ্যে পড়া।
পিটার হ্যানসেন 21

আপনার এই উত্তরটি সরানো উচিত। এটি সঠিক উপায়ে নয় এবং মানুষকে ঠকায়।
থ্যাং করুন

-15
f1 = open("input1.txt", "r")
print(f1.readline())

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