2012-07-25 11 views
5

मैं करते हैं:इसकी लंबाई प्राप्त करने के लिए मुझे एक चर को f.readlines() में असाइन करने की आवश्यकता क्यों है?

os.chdir(path) 
f = open(file,"r") 

lines = f.readlines() 
print "without assignment " + str(len(f.readlines())) 
print "with assignment  " + str(len(lines)) 

मैं उम्मीद करेंगे उत्पादन ही हो, लेकिन ऐसा नहीं है:

without assignment 0 
with assigment  1268 

ऐसा क्यों है?

उत्तर

7

फ़ाइल ऑब्जेक्ट f फ़ाइल की रेखाओं पर एक पुनरावर्तक है। f.readlines() फ़ाइल कर्सर को अंत में ले जाता है लेकिन lines में लाइनों को सहेजता है, यही कारण है कि दूसरा उदाहरण आपके लिए काम करता है। पहला उदाहरण काम नहीं करता है क्योंकि आप फ़ाइल के अंत तक पहुंच गए हैं और पढ़ने के लिए कोई लाइन नहीं छोड़ी गई है। यदि आप यह काम करना चाहते हैं तो कर्सर को फ़ाइल की शुरुआत में वापस ले जाने के लिए आप f.seek(0) का उपयोग कर सकते हैं।

+0

(एक पुनरावर्तक, और यह फ़ाइल कर्सर को अंत में ले जाता है, जो मुझे लगता है कि इसे ढीले अर्थ में लेने के लिए तुलनीय है)। – Julian

+0

@ जुलिएयन धन्यवाद, सही। – jamylak

+0

मुझे लगता है कि बिंदु यह है कि 'f.readlines() 'फाइल पॉइंटर की वर्तमान स्थिति से शुरू होने वाली रेखाएं * पढ़ती है * और जब फ़ाइल के अंत में फ़ाइल पॉइंटर को छोड़ दिया जाता है। (+1) – mgilson

संबंधित मुद्दे

 संबंधित मुद्दे