http://blog.csdn.net/oldjwu/article/details/4329401
Python每次讀入檔案一行的問題分類: Python2009-07-07 21:46 1612人閱讀 評論(0) 收藏 舉報
注意到Python每次讀入一個檔案的一行時,可以有兩種寫法:
[python] view plaincopy
- f = open("bigFile.txt", "r")
- while True:
- line = f.readline()
- if line:
- pass # do something here
- else:
- break
- f.close()
另一種寫法為:
[python] view plaincopy
- f = open("bigFile.txt", "r")
- for line in f:
- pass # do something here
- f.close()
很明顯地,後一種寫法更簡潔,而且經過測試,效率似乎也略高一些,不過好像很少看見這樣的寫法。不知道這兩種寫法有什麼區別。
剛剛看到PyDoc中的FileObject的next()說明
-----------------------------------------
next( )
A file object is its own iterator, for example iter(f) returns f
(unless f is closed). When a file is used as an iterator, typically in
a for loop (for example, for line in f: print line), the next() method
is called repeatedly. This method returns the next input line, or
raises StopIteration when EOF is hit when the file is open for reading
(behavior is undefined when the file is open for writing). In order to
make a for loop the most efficient way of looping over the lines of a
file (a very common operation), the next() method uses a hidden read-
ahead buffer. As a consequence of using a read-ahead buffer, combining
next() with other file methods (like readline()) does not work right.
However, using seek() to reposition the file to an absolute position
will flush the read-ahead buffer. New in version 2.3.