मैंने this, this और this चेक किया है।पायथन - एक समय में फ़ाइल से 1000 लाइनें पढ़ें
तीसरे लिंक का जवाब अभी तक हुआ था, लेकिन यह नौकरी नहीं करता था।
मेरे पास ऐसा समाधान नहीं हो सकता है जहां पूरी फ़ाइल मुख्य मेमोरी में लाई जाए, क्योंकि जिन फाइलों के साथ मैं काम करूँगा वे बहुत बड़े होंगे। तो मैंने तीसरे लिंक में दिखाए गए अनुसार islice
का उपयोग करने का निर्णय लिया। पहले 2 लिंक अप्रासंगिक थे क्योंकि उन्होंने इसे केवल 2 लाइनों के लिए इस्तेमाल किया था या 1000 वर्ण पढ़े थे। जबकि मुझे 1000 लाइनों की आवश्यकता है।for now N is 1000
मेरे फ़ाइल 1 लाख लाइनों में शामिल हैं:
नमूना:
1 1 1
1 2 1
1 3 1
1 4 1
1 5 1
1 6 1
1 7 1
1 8 1
1 9 1
1 10 1
तो अगर मैं एक समय में 1000 लाइनों पढ़ा है, मुझे while
1000
समय से गुजर जाना चाहिए , फिर भी जब मैं p
प्रिंट करता हूं यह जांचने के लिए कि कितनी बार मैं अंदर गया हूं, यह 1000
पर नहीं रुकता है । यह 1400
सेकंड के लिए अपना प्रोग्राम चलाने के बाद 19038838
पर पहुंच गया !!
कोड:
def _parse(pathToFile, N, alg):
p = 1
with open(pathToFile) as f:
while True:
myList = []
next_N_lines = islice(f, N)
if not next_N_lines:
break
for line in next_N_lines:
s = line.split()
x, y, w = [int(v) for v in s]
obj = CoresetPoint(x, y)
Wobj = CoresetWeightedPoint(obj, w)
myList.append(Wobj)
a = CoresetPoints(myList)
client.compressPoints(a) // This line is not the problem
print(p)
p = p+1
c = client.getTotalCoreset()
return c
क्या मैं गलत कर रहा हूँ?
'f' शायद भस्म नहीं है ताकि आप एक ही और एक ही 1000 लाइनों हर बार पढ़ने खत्म । यह कभी समाप्त नहीं होगा। आपको 'islice' (' itertools.islice (iterable, start, stop [, step]) के लिए वैकल्पिक फॉर्मूलेशन का उपयोग करना होगा, यह एक और नहीं 'itertools.islice (iterable, stop) ' –