কেবল নির্দিষ্ট লাইনগুলি পড়া


215

আমি কোনও ফাইল পড়ার জন্য লুপের জন্য ব্যবহার করছি, তবে আমি কেবল নির্দিষ্ট লাইনগুলিই পড়তে চাই, বলুন # 26 এবং # 30 say এটি অর্জনের জন্য কি কোনও অন্তর্নির্মিত বৈশিষ্ট্য রয়েছে?

ধন্যবাদ


1
সম্ভাব্য দ্বিধা: স্ট্যাকওভারফ্লো.
আদম মাতান

উত্তর:


253

যদি পড়ার ফাইলটি বড় হয় এবং আপনি পুরো ফাইলটি একবারে মেমোরিতে পড়তে চান না:

fp = open("file")
for i, line in enumerate(fp):
    if i == 25:
        # 26th line
    elif i == 29:
        # 30th line
    elif i > 29:
        break
fp.close()

লক্ষ্য করুন i == n-1জন্য nতম লাইন।


পাইথন ২.6 বা তার পরে:

with open("file") as fp:
    for i, line in enumerate(fp):
        if i == 25:
            # 26th line
        elif i == 29:
            # 30th line
        elif i > 29:
            break

8
enumerate(x)ব্যবহার করে x.next, সুতরাং এটি মেমরির পুরো ফাইল প্রয়োজন হয় না।
অলোক সিংহল

3
এর সাথে আমার ছোট গরুর মাংস হ'ল এ) আপনি খোলা / ঘনিষ্ঠ জুটির পরিবর্তে ব্যবহার করতে চান এবং এইভাবে শরীরকে সংক্ষিপ্ত রাখতে চান, খ) তবে শরীরটি ছোট নয়। গতি / স্থান এবং পাইথোনিক হওয়ার মধ্যে একটি বাণিজ্য-বন্ধের মতো শোনাচ্ছে। আমি নিশ্চিত না এর সেরা সমাধানটি কী হবে।
হামিশ গ্রুবিজন

5
ওভাররেড হয়ে গেছে, অজগরটি 13 বছর ধরে এটি ছাড়াই জরিমানা করেছে
ড্যান ডি

38
@ ড্যান ডি বিদ্যুৎ ওভাররেটেড হয়েছে, মানবজাতি 200,000 বছরেরও বেশি সময় ধরে এটি জরিমানা করেছে। ;-) 'সহ' এটিকে আরও সুরক্ষিত, আরও পঠনযোগ্য এবং এক লাইন খাটো করে তুলছে।
রোমেন ভিনসেন্ট

9
কেন লুপের জন্য ব্যবহার করবেন, আমি মনে করি না আপনি এর অর্থ বুঝতে পেরেছেন big file। লুপটি সূচীতে পৌঁছাতে কয়েক বছর সময় নেবে
devssh

159

দ্রুত উত্তর:

f=open('filename')
lines=f.readlines()
print lines[25]
print lines[29]

বা:

lines=[25, 29]
i=0
f=open('filename')
for line in f:
    if i in lines:
        print i
    i+=1

অনেকগুলি লাইন নিষ্কাশনের জন্য আরও মার্জিত সমাধান রয়েছে: লিনেকাচ (সৌজন্যে "পাইথন: একটি বিশাল টেক্সট ফাইলে একটি নির্দিষ্ট লাইনে কীভাবে ঝাঁপান ?" , পূর্ববর্তী স্ট্যাকওভারফ্লো ডটকম প্রশ্ন)।

উপরে লিঙ্কন পাইথন ডকুমেন্টেশন উদ্ধৃত:

>>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'

4আপনার পছন্দসই লাইন নম্বরটিতে পরিবর্তন করুন এবং আপনি চালু আছেন। নোট করুন যে গণনাটি শূন্য-ভিত্তিক হওয়ায় 4 পঞ্চম লাইন নিয়ে আসবে।

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

শেষ করা:

  • ব্যবহার করুন fileobject.readlines()অথবা for line in fileobjectছোট ফাইল জন্য একটি দ্রুত সমাধান হিসেবে।
  • linecacheআরও মার্জিত সমাধানের জন্য ব্যবহার করুন যা অনেকগুলি ফাইল পড়ার পক্ষে দ্রুত হবে, বারবার সম্ভব হবে।
  • অলোকের পরামর্শenumerate() নিন এবং যে ফাইলগুলি খুব বড় হতে পারে তার জন্য ব্যবহার করুন এবং এটি মেমরির সাথে খাপ খায় না। নোট করুন যে এই পদ্ধতিটি ব্যবহার করা ধীর হতে পারে কারণ ফাইলটি ধারাবাহিকভাবে পড়া হয়।

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

7
লিনেকাচি.টেলিন দিয়ে ('কিছু_ফিল', 4) আমি 4 র্থ লাইন পেয়েছি, 5 তম নয়।
হুয়ান

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

linecacheএখন কেবল অজগর উত্স ফাইলগুলির জন্য কাজ করতে দেখা যাচ্ছে
পল এইচ

আপনি linecache.getlines('/etc/passwd')[0:4]প্রথম, দ্বিতীয়, তৃতীয় এবং চতুর্থ লাইনে পড়তেও ব্যবহার করতে পারেন।
zyy

30

একটি দ্রুত এবং সংক্ষিপ্ত পদ্ধতির হতে পারে:

def picklines(thefile, whatlines):
  return [x for i, x in enumerate(thefile) if i in whatlines]

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

def yieldlines(thefile, whatlines):
  return (x for i, x in enumerate(thefile) if i in whatlines)

এটি কেবলমাত্র লুপিংয়ের জন্যই ভাল - লক্ষ্য করুন যে returnবিবৃতিতে বর্গাকার বন্ধনীগুলির চেয়ে গোলাকার ব্যবহারের মাধ্যমে কেবলমাত্র পার্থক্যটি আসে যথাক্রমে একটি তালিকা বোধগম্য এবং জেনারেটর এক্সপ্রেশন তৈরি করে।

আরও নোট করুন যে "লাইন" এবং "ফাইল" উল্লেখ করা সত্ত্বেও এই ফাংশনগুলি অনেক বেশি, সাধারণ - তারা যে কোনও পুনরাবৃত্তির উপর কাজ করবে, এটি একটি উন্মুক্ত ফাইল বা অন্য কোনও, আইটেমের একটি তালিকা (বা জেনারেটর) ফিরিয়ে দেবে তাদের প্রগতিশীল আইটেম-সংখ্যাগুলির ভিত্তিতে। সুতরাং, আমি আরও যথাযথভাবে সাধারণ নামগুলি ব্যবহার করার পরামর্শ দেব ;-)।


@ প্রিমিয়েন্ট, আমি দ্বিমত পোষণ করছি - জেনপ্স সহজ এবং নিখুঁতভাবে পড়ছে।
অ্যালেক্স মার্টেলি

দুর্দান্ত এবং মার্জিত সমাধান, ধন্যবাদ! জেনারেটর এক্সপ্রেশন সহ সত্যই, এমনকি বড় ফাইলগুলিও সমর্থন করা উচিত। এর চেয়ে বেশি মার্জিত হতে পারে না, তাই না? :)
স্যামুয়েল লাম্পা

চমৎকার সমাধান, এটি কীভাবে @ অ্যাডাম্যাটান দ্বারা প্রস্তাবিত সাথে তুলনা করে? অ্যাডাম সমাধানটি আরও তাত্পর্যপূর্ণ হতে পারে কারণ এটি অতিরিক্ত তথ্য (এককভাবে বৃদ্ধির লাইন সংখ্যা) কাজে লাগায় যা প্রাথমিক পর্যায়ে থামতে পারে। আমার কাছে একটি 10 ​​জিবি ফাইল রয়েছে যা আমি মেমোরিতে লোড করতে পারি না।
মান্নাগগিয়া

2
@ মান্নাগগিয়া এই উত্তরে এটি যথেষ্ট জোর দেওয়া হয়নি, তবে whatlinesএটি একটি হওয়া উচিত set, কারণ if i in whatlinesএকটি (সাজানো) তালিকার পরিবর্তে একটি সেট দিয়ে দ্রুত কার্যকর করা হবে। আমি প্রথমে এটি লক্ষ্য করিনি এবং পরিবর্তে বাছাই করা তালিকার সাথে আমার নিজের কুরুচিপূর্ণ সমাধানটি তৈরি করেছি (যেখানে আমাকে প্রতিবার একটি তালিকা স্ক্যান করতে হবে না, যখন if i in whatlinesএটি করা হয়) তবে পারফরম্যান্সের পার্থক্য ছিল নগণ্য (আমার ডেটা সহ) এবং এটি সমাধান অনেক বেশি মার্জিত।
ভিক্টর কে

28

আরেকটি সমাধান দেওয়ার জন্য:

import linecache
linecache.getline('Sample.txt', Number_of_Line)

আমি আশা করি এটি দ্রুত এবং সহজ :)


1
আশা করি এটি সর্বাধিক অনুকূল সমাধান।
maniac_user 21

2
এটি পুরো ফাইলটিকে মেমরিতে পড়ে reads আপনি ভাল হিসাবে file.read কল পারে () বিভক্ত ( '\ N') তারপর অ্যারের সূচক লুক-ব্যবহার সুদের লাইন পেতে ...।
duhaime

আপনি একটি উদাহরণ @duhaime প্রদান করতে পারে
বেনামা

14

আপনি যদি লাইন 7 চান

লাইন = খুলুন ("file.txt", "আর") read পঠনরেখা () []]

14
ঝরঝরে। কিন্তু close()ফাইলটি এভাবে খুললে আপনি কী করবেন ?
মিলো উইলোন্ডেক

1
@ 0sh আমাদের কি বন্ধ করা দরকার?
ওকার

1
হ্যাঁ. আমাদের এটির পরে বন্ধ করা দরকার W যখন আমরা "সহ" ব্যবহার করে কোনও ফাইল খুলি ... এটি নিজেই বন্ধ হয়।
পুনর্বার 11 ই

10

সম্পূর্ণতার জন্য, এখানে আরও একটি বিকল্প রয়েছে is

পাইথন ডক্স থেকে একটি সংজ্ঞা দিয়ে শুরু করা যাক :

স্লাইস একটি বস্তু যা সাধারণত ক্রমের একটি অংশ থাকে। সাবস্ক্রিপ্ট স্বরলিপি ব্যবহার করে একটি স্লাইস তৈরি করা হয়, [বেশ কয়েকটি যখন দেওয়া হয় তখন সংখ্যার মধ্যে কলোন সহ, যেমন ভেরিয়েবল_নেম [1: 3: 5]। বন্ধনী (সাবস্ক্রিপ্ট) স্বরলিপি অভ্যন্তরীণভাবে স্লাইস অবজেক্ট ব্যবহার করে (বা পুরানো সংস্করণগুলিতে, __getslice __ () এবং __setslice __ ())।

যদিও স্লাইস স্বরলিপিটি সাধারণভাবে প্রত্যক্ষকারীর জন্য সরাসরি প্রযোজ্য নয়, itertoolsপ্যাকেজে একটি প্রতিস্থাপন ফাংশন রয়েছে:

from itertools import islice

# print the 100th line
with open('the_file') as lines:
    for line in islice(lines, 99, 100):
        print line

# print each third line until 100
with open('the_file') as lines:
    for line in islice(lines, 0, 100, 3):
        print line

ফাংশনের অতিরিক্ত সুবিধা হ'ল এটি শেষ পর্যন্ত পুনরুক্তি পাঠ করে না। সুতরাং আপনি আরও জটিল জিনিসগুলি করতে পারেন:

with open('the_file') as lines:
    # print the first 100 lines
    for line in islice(lines, 100):
        print line

    # then skip the next 5
    for line in islice(lines, 5):
        pass

    # print the rest
    for line in lines:
        print line

এবং মূল প্রশ্নের উত্তর দিতে:

# how to read lines #26 and #30
In [365]: list(islice(xrange(1,100), 25, 30, 4))
Out[365]: [26, 30]

1
বড় ফাইলগুলির সাথে কাজ করার সময় পর্যন্ত সর্বোত্তম পন্থা। আমার প্রোগ্রামটি 8 গিগাবাইট + গ্রাহ্য করা থেকে প্রায় কিছুই হয় নি। ট্রেড অফ ছিল সিপিইউ ব্যবহার যা ~ 15% থেকে 40% হয়ে গেছে তবে ফাইলটির প্রকৃত প্রক্রিয়াকরণ 70% দ্রুত ছিল। আমি সারা দিন ধরে এই ট্রেড অফ করব take তোমাকে ধন্যবাদ! 🎉🎉🎉
গলিজিয়ার

1
এটি আমার কাছে সবচেয়ে অজগর মনে হয়। ধন্যবাদ!
ইপেট্রিক

10

ফাইল পড়া অবিশ্বাস্য দ্রুত। 100 এমবি ফাইল পড়তে 0.1 সেকেন্ডেরও কম সময় লাগে ( পাইথন সহ আমার নিবন্ধটি পড়া এবং লেখার ফাইলগুলি দেখুন )। সুতরাং আপনার এটি সম্পূর্ণরূপে পড়া উচিত এবং তারপরে একক লাইনগুলির সাথে কাজ করা উচিত।

এখানে সর্বাধিক উত্তরগুলি যা দেয় তা ভুল নয়, তবে খারাপ শৈলী। ফাইলগুলি খোলার কাজটি সর্বদা সাথে করা উচিত withকারণ এটি নিশ্চিত করে যে ফাইলটি আবার বন্ধ রয়েছে।

সুতরাং আপনার এটি করা উচিত:

with open("path/to/file.txt") as f:
    lines = f.readlines()
print(lines[26])  # or whatever you want to do with this line
print(lines[30])  # or whatever you want to do with this line

বিশাল ফাইল

যদি আপনার কাছে বিশাল ফাইল এবং মেমরির গ্রহণের বিষয়টি উদ্বেগজনক হয় তবে আপনি এটি লাইন লাইন প্রক্রিয়াকরণ করতে পারেন:

with open("path/to/file.txt") as f:
    for i, line in enumerate(f):
        pass  # process line i

আইএমও এটি কেবলমাত্র প্রথম 30 টি লাইন পেতে অজানা দৈর্ঘ্যের একটি সম্পূর্ণ ফাইল পড়ার পক্ষে একটি সত্যই খারাপ শৈলী .. মেমরির ব্যবহার সম্পর্কে কী ... এবং অন্তহীন প্রবাহগুলি কী?
ফেরান 42

@ রিটার্ন 42 এটি আবেদনের উপর অনেক বেশি নির্ভর করে। অনেকের কাছে, এটি অনুমান করা সম্পূর্ণ জরিমানা যে কোনও পাঠ্য ফাইলের উপলব্ধ মেমরির চেয়ে কম আয়তন রয়েছে। আপনার যদি সম্ভাব্য বিশাল ফাইল থাকে তবে আমি আমার উত্তর সম্পাদনা করেছি।
মার্টিন থোমা

আপনার সংযোজনের জন্য ধন্যবাদ, যা অলোক উত্তর হিসাবে একই । এবং দুঃখিত না, আমি মনে করি না এটি আবেদনের উপর নির্ভর করে। আপনার যখন প্রয়োজন তখন আইএমও আরও লাইন না পড়া সর্বদা ভাল।
রিটার্ন 42

7

এর মধ্যে কিছু সুন্দর, তবে এটি আরও অনেক সহজভাবে করা যেতে পারে:

start = 0 # some starting index
end = 5000 # some ending index
filename = 'test.txt' # some file we want to use

with open(filename) as fh:
    data = fin.readlines()[start:end]

print(data)

এটি কেবল স্লাইসিংয়ের তালিকা ব্যবহার করবে, এটি পুরো ফাইলটি লোড করে, তবে বেশিরভাগ সিস্টেমে যথাযথভাবে মেমরির ব্যবহার কমিয়ে দেবে, এটি উপরে বর্ণিত বেশিরভাগ পদ্ধতির চেয়ে দ্রুত এবং আমার 10 জি + ডেটা ফাইলগুলিতে কাজ করে। শুভকামনা!


4

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

অন্যথায়, ইতিমধ্যে এখানে প্রস্তাবিত অনেকগুলি সমাধানের মধ্যে একটি হিসাবে আপনার ইচ্ছুক রেখার আগে আপনাকে প্রতিটি লাইন পড়তে হবে।


3

যদি আপনার বৃহত পাঠ্য ফাইলটি fileকঠোরভাবে কাঠামোগত হয় (যার অর্থ প্রতিটি লাইনের সমান দৈর্ঘ্য থাকে l), আপনি n-th লাইনের জন্য ব্যবহার করতে পারেন

with open(file) as f:
    f.seek(n*l)
    line = f.readline() 
    last_pos = f.tell()

দাবি অস্বীকার এটি কেবল একই দৈর্ঘ্যের ফাইলগুলির জন্য কাজ করে!



2

আপনি যদি আমদানি করতে আপত্তি করেন না তবে ফাইলিনপুট আপনার যা প্রয়োজন ঠিক তা করে (এটি আপনি বর্তমান লাইনের লাইন নম্বরটি পড়তে পারেন)


2
def getitems(iterable, items):
  items = list(items) # get a list from any iterable and make our own copy
                      # since we modify it
  if items:
    items.sort()
    for n, v in enumerate(iterable):
      if n == items[0]:
        yield v
        items.pop(0)
        if not items:
          break

print list(getitems(open("/usr/share/dict/words"), [25, 29]))
# ['Abelson\n', 'Abernathy\n']
# note that index 25 is the 26th item

রজার, আমার প্রিয় লোক! বিবৃতি সহ এটি থেকে উপকৃত হতে পারে।
হামিশ গ্রুবিজন

2

কারণ এটির আরও বেশি সাধারণ আমি এই পদ্ধতির পছন্দ, IE আপনি একটি ফাইল তে এটি ব্যবহার করতে পারেন ফলাফলে, f.readlines()একটি উপর StringIOবস্তু, যাই হোক না কেন:

def read_specific_lines(file, lines_to_read):
   """file is any iterable; lines_to_read is an iterable containing int values"""
   lines = set(lines_to_read)
   last = max(lines)
   for n, line in enumerate(file):
      if n + 1 in lines:
          yield line
      if n + 1 > last:
          return

>>> with open(r'c:\temp\words.txt') as f:
        [s for s in read_specific_lines(f, [1, 2, 3, 1000])]
['A\n', 'a\n', 'aa\n', 'accordant\n']

2

এখানে আমার সামান্য 2 সেন্ট, এটির জন্য মূল্য;)

def indexLines(filename, lines=[2,4,6,8,10,12,3,5,7,1]):
    fp   = open(filename, "r")
    src  = fp.readlines()
    data = [(index, line) for index, line in enumerate(src) if index in lines]
    fp.close()
    return data


# Usage below
filename = "C:\\Your\\Path\\And\\Filename.txt"
for line in indexLines(filename): # using default list, specify your own list of lines otherwise
    print "Line: %s\nData: %s\n" % (line[0], line[1])

2

অলোক সিংহলের উত্তরের জন্য একটি আরও ভাল এবং সামান্য পরিবর্তন

fp = open("file")
for i, line in enumerate(fp,1):
    if i == 26:
        # 26th line
    elif i == 30:
        # 30th line
    elif i > 30:
        break
fp.close()

1

ফাইল অবজেক্টের একটি .readlines () পদ্ধতি রয়েছে যা আপনাকে ফাইলের সামগ্রীর তালিকান, তালিকা আইটেমের জন্য এক লাইন দেয়। এর পরে, আপনি কেবল সাধারণ তালিকা স্লাইসিং কৌশলগুলি ব্যবহার করতে পারেন।

http://docs.python.org/library/stdtypes.html#file.readlines


1

@ ওপ, আপনি গণনা ব্যবহার করতে পারেন

for n,line in enumerate(open("file")):
    if n+1 in [26,30]: # or n in [25,29] 
       print line.rstrip()

1
file = '/path/to/file_to_be_read.txt'
with open(file) as f:
    print f.readlines()[26]
    print f.readlines()[30]

স্টেটমেন্ট সহ স্টেটমেন্টটি ব্যবহার করে এটি ফাইলটি খোলে, 26 এবং 30 টি লাইন প্রিন্ট করে, তারপর ফাইলটি বন্ধ করে দেয়। সরল!


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

1

আপনি ইতিমধ্যে এই সিনট্যাক্সটি দিয়ে খুব সহজেই এটি করতে পারেন যা ইতিমধ্যে কেউ উল্লেখ করেছেন, তবে এটি করার সহজ উপায় এটি:

inputFile = open("lineNumbers.txt", "r")
lines = inputFile.readlines()
print (lines[0])
print (lines[2])

1

লাইন # 3 মুদ্রণ করতে,

line_number = 3

with open(filename,"r") as file:
current_line = 1
for line in file:
    if current_line == line_number:
        print(file.readline())
        break
    current_line += 1

মূল লেখক: ফ্র্যাঙ্ক হফম্যান


1

মোটামুটি দ্রুত এবং বিন্দু।

একটি পাঠ্য ফাইলে নির্দিষ্ট লাইন মুদ্রণ করতে। একটি "লাইনস 2 প্রিন্ট" তালিকা তৈরি করুন এবং তারপরে যখন রেখা 2 প্রিন্ট তালিকায় গণনাটি "ইন" থাকবে তখন কেবল মুদ্রণ করুন। অতিরিক্ত 'of n' থেকে মুক্তি পেতে লাইন.স্ট্রিপ () বা লাইন.স্ট্রিপ ('\ n') ব্যবহার করুন। আমি ঠিক "তালিকা বোঝার" পছন্দ করি এবং যখন পারি তখন ব্যবহার করার চেষ্টা করি। কোনও কারণেই কোনও ফাইল খোলা রাখা রোধ করতে আমি "উইথ" পদ্ধতিটি পাঠ্য ফাইলগুলি পড়তে পছন্দ করি।

lines2print = [26,30] # can be a big list and order doesn't matter.

with open("filepath", 'r') as fp:
    [print(x.strip()) for ei,x in enumerate(fp) if ei in lines2print]

বা যদি তালিকাটি ছোট হয় তবে অনুধাবনের তালিকা হিসাবে তালিকায় টাইপ করুন।

with open("filepath", 'r') as fp:
    [print(x.strip()) for ei,x in enumerate(fp) if ei in [26,30]]

0

পছন্দসই লাইন প্রিন্ট করতে। প্রয়োজনীয় লাইনের উপরে / নীচে লাইন প্রিন্ট করতে।

def dline(file,no,add_sub=0):
    tf=open(file)
    for sno,line in enumerate(tf):
        if sno==no-1+add_sub:
         print(line)
    tf.close()

এক্সিকিউট করুন ----> dline ("D: um dummy.txt", 6) অর্থাত্ dline ("ফাইলের পাথ", লাইন_ সংখ্যা, আপনি যদি অনুসন্ধান করা লাইনের উপরের লাইনটি নিম্ন -1 এর জন্য 1 দিতে চান তবে এটি isচ্ছিক ডিফল্ট মান হবে নেওয়া হবে 0)


0

আপনি যদি নির্দিষ্ট রেখাগুলি পড়তে চান যেমন লাইন কিছু থ্রেশহোল্ড লাইনের পরে শুরু হয় তবে আপনি নিম্নলিখিত কোডগুলি ব্যবহার করতে পারেন, file = open("files.txt","r") lines = file.readlines() ## convert to list of lines datas = lines[11:] ## raed the specific lines


-1
f = open(filename, 'r')
totalLines = len(f.readlines())
f.close()
f = open(filename, 'r')

lineno = 1
while lineno < totalLines:
    line = f.readline()

    if lineno == 26:
        doLine26Commmand(line)

    elif lineno == 30:
        doLine30Commmand(line)

    lineno += 1
f.close()

7
এটি যতটা বেপরোয়া gets
সাইলেন্টগোস্ট

আপনি যেমন রিডলাইন এবং পঠনের জন্য ব্যবহার করতে না পারেন (তাই তারা প্রত্যেকেই বর্তমানের পড়ার অবস্থান পরিবর্তন করে) ভুল ফলাফল দেয়।

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

-1

আমি মনে করি এটি কাজ করবে

 open_file1 = open("E:\\test.txt",'r')
 read_it1 = open_file1.read()
 myline1 = []
 for line1 in read_it1.splitlines():
 myline1.append(line1)
 print myline1[0]

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