2014-04-18 21 views
1

使用Python 2-7:文件後的Python文件讀取都是讀

msg = self.infile.read(1500) 

我從文件中讀取的1500Bytes件內部的可能是無限的,而循環, 當完成所有文件和我已經讀過這一切發生了什麼?我會從頭再讀一遍嗎? (我不想這樣)

有沒有一種簡單的方法來計算多少個1500B字符串(或更少的最後一個字符串)的總和,而不保存它們?

+0

有你抓住1500塊字節的塊,而不僅僅是每行處理具體原因? – Drahkar

+1

爲什麼不試試一個小文件,看看你在達到目標時得到了什麼?然後輸入問題會更快。 – cmd

+0

drahkar是我通過網絡發送幀,這是我分配的有效載荷大小,cmd我打算像其他Python新手像我可以受益於這些問題以及 –

回答

0

可以容納計數器:循環結束ct變量將持有的塊數

ct = 0 
while 1: 
    msg = self.infile.read(1500) 
    if len(msg) == 0: 
     break 
    else: 
     ct += 1 

後。

+2

'else'是多餘的 –

+1

我剛剛意識到您實際上正在回答他大多數人都在查看的部分問題。 – Drahkar

+1

@Drahkar我並不是說'ct + = 1'也是多餘的,我的意思是不需要'else'分支。我認爲使用'not msg'而不是'len(msg)== 0'會更好([style guide](http://legacy.python)也是如此。org/dev/peps/pep-0008 /)) –

0

更新

雖然我將離開下面的注意事項我加了這裏,這裏其他的答案是更好地滿足您的要求。

具體添加

if not msg: 
    break 

進入循環將停止無限循環,當你到達EOF的照顧。


你有沒有詳細的爲什麼要抓住1500點字節的塊,我要建議每行的解決方案的替代方案。假設self.infile是一個文件描述符。

msg = [ line for line in self.infile ] 

這將使您與來自文件中的每一行中的單獨的元件與索引「0」是第一和索引「n」個(即最後一個元素列表中的)是最後一個列表。

+0

msg = self.infile.readlines()有點短 – Jiri

0

可以chunk使用iter喜歡閱讀本

>>> with open('infile') as infile: 
...  for chunk in iter(lambda:infile.read(1500), ''): 
...   if len(chunk) == 1500: # skip if size of chunk is less than 1500 
...    print chunk # you can deal with `chunk` and count it here 

,或者你只是想知道計數

>>> os.stat('infile').st_size/1500