python中readline判斷文件讀取結束實例

大家知道,python中按行讀取文件可以使用readline函數,下面寫一個按行遍曆讀取文件的方法,通過這個方法,引入我們要討論的問題。

代碼如下

filename = raw_input('Enter your file name') #輸入要遍曆讀取的文件路徑及文件名
file = open(filename,'r')
done = 0
while not done:
aLine = file.readline()
if(aLine != ''):
print aLine,
else:
done = 1
file.close() #關閉文件

上面是我們經常看到的按行遍曆一個文件方法,你可能已經注意到我在代碼中寫的if(aLine != '' ):部分。當readline讀取到爲空的時候,意味著讀到了文件的結束。這個時候,問題就在這裏,很多人會想,是不是遇到一個空行,也會被認爲是文件的結束呢?這就引入了標題的問題。

事實上,文件的空白行並不會返回一個空行。因爲在每一行的末尾還有一個或者多個分隔符,因此“空白行”至少會有一個換行符或者系統使用的其他符號。所以,即使文件中真的包含一個“空白行”,讀入的行也不是空的,這就意味著在真實遍曆讀取到文件結束之前,程序實際上是不會停止的


readline() 和 .readlines() 非常相似。它們都在類似于以下的結構中使用:

Python .readlines()

示例

代碼如下
fh = open('c:\autoexec.bat')
for line in fh.readlines():
print line


.readline() 和 .readlines() 之間的差異是後者一次讀取整個文件,象 .read() 一樣。.readlines() 自動將文件內容分析成一個行的列表,該列表可以由 Python 的 for ... in ... 結構進行處理。另一方面,.readline() 每次唯讀取一行,通常比 .readlines() 慢得多。僅當沒有足夠記憶體可以一次讀取整個文件時,才應該使用 .readline()。

readlines返回行數問題

官方文檔這樣寫的 If the optional sizehint argument is present, instead of reading up to EOF, whole lines totalling approximately sizehint bytes (possibly after rounding up to an internal buffer size) are read.

確實是指定大小啊並且會受內部緩沖區大小影響向上取整到內部緩沖區大小。內部緩沖區大約是8k也難怪我每次測試文件大小都是8k(8192)倍數

代碼如下

#!/usr/bin/env python

f=open('a.txt').readlines(1)
open('b.txt','w').writelines(f)
open('c.txt','w').writelines(open('a.txt').readlines(200))
open('d.txt','w').writelines(open('a.txt').readlines(9200))
open('e.txt','w').writelines(open('a.txt').readlines(26000))
open('f.txt','w').writelines(open('a.txt').readlines(40000))

更多相關文章
  • mongodb也是一種輕型的數據庫,下面我來介紹java與mongodb數據庫的應用,包括寫,讀取,保存mongodb數據庫的實例,各位朋友有需要可參考.下面的例子是把User對象插入到Mongodb中,並讀出來 代碼如下 User.java:package com.mongo; public cl ...
  • 下面我來介紹一個Zend Framework中如何判斷URL是否設置了轉發,有需要學習的朋友可參考.發送HTTP請求: 代碼如下 $client = new Zend_Http_Client(); $client->setUri($url); $client->setConfig(arr ...
  • 在寫程序時發現在判斷文件是否存在時,有兩種寫法,有的人用了is_file,有的人用了file_exists,用哪個更好或者說更合適呢?判斷文件存在用is_file還是file_exists?在寫程序時發現在判斷文件是
  • nginx上try_files是後面的nginx版本才有的一個功能了,下面小編來給大家介紹利用nginx上try_files 判斷文件是否存在,希望此文章對大家有所幫助.try_files 是nginx0.6.36
  • webtail 能夠持續讀取一個文件,並將文件內容通過websocket,及時推送到web端.webtail文件讀取基于linux的inotify,所以沒有可移植性.文件讀取先介紹下背景,之前遇到過伺服器上需要長時間tail一個日志,之前經常是通過一個終端連到伺服器上,但是對于長時間觀察,就不太方便
  • 虛擬機安裝win10報錯Windows無法從無人參與應答文件讀取ProductKey設置解決辦法
    虛擬機是在系統中安裝系統了它中是一個虛擬的東西了,一般的操作系統都是支持虛擬機下安裝了,但win10系統在虛擬機安裝提示"Windows無法從無人參與應答文件讀取ProductKey設置"錯誤了,對于這個問題我們來看解決辦法.在小編在虛擬機中安裝win10系統時會報如下所示&qu ...
  • 在上傳文件時經常要判斷文件夾是否存在,如果存在就上傳文件,否則新建文件夾再上傳文件語法大概這樣string dir="d:xxxyyy"if (system.io.directory.exists(dir)){ // 存在}else{ // 不存在}下面來看一下詳細代碼判斷語句爲 ...
  • 本文章講了三個實例是利用java對zip 壓縮文件的讀寫操作,實例如下.創建一個zip壓縮文件import java.io.fileinputstream;import java.io.fileoutputstream;import java.util.zip.zipentry;import jav ...
一周排行