使用Python 2-7:文件後的Python文件讀取都是讀
msg = self.infile.read(1500)
我從文件中讀取的1500Bytes件內部的可能是無限的,而循環, 當完成所有文件和我已經讀過這一切發生了什麼?我會從頭再讀一遍嗎? (我不想這樣)
有沒有一種簡單的方法來計算多少個1500B字符串(或更少的最後一個字符串)的總和,而不保存它們?
使用Python 2-7:文件後的Python文件讀取都是讀
msg = self.infile.read(1500)
我從文件中讀取的1500Bytes件內部的可能是無限的,而循環, 當完成所有文件和我已經讀過這一切發生了什麼?我會從頭再讀一遍嗎? (我不想這樣)
有沒有一種簡單的方法來計算多少個1500B字符串(或更少的最後一個字符串)的總和,而不保存它們?
可以容納計數器:循環結束ct
變量將持有的塊數
ct = 0
while 1:
msg = self.infile.read(1500)
if len(msg) == 0:
break
else:
ct += 1
後。
'else'是多餘的 –
我剛剛意識到您實際上正在回答他大多數人都在查看的部分問題。 – Drahkar
@Drahkar我並不是說'ct + = 1'也是多餘的,我的意思是不需要'else'分支。我認爲使用'not msg'而不是'len(msg)== 0'會更好([style guide](http://legacy.python)也是如此。org/dev/peps/pep-0008 /)) –
更新
雖然我將離開下面的注意事項我加了這裏,這裏其他的答案是更好地滿足您的要求。
具體添加
if not msg:
break
進入循環將停止無限循環,當你到達EOF的照顧。
你有沒有詳細的爲什麼要抓住1500點字節的塊,我要建議每行的解決方案的替代方案。假設self.infile是一個文件描述符。
msg = [ line for line in self.infile ]
這將使您與來自文件中的每一行中的單獨的元件與索引「0」是第一和索引「n」個(即最後一個元素列表中的)是最後一個列表。
msg = self.infile.readlines()有點短 – Jiri
可以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
有你抓住1500塊字節的塊,而不僅僅是每行處理具體原因? – Drahkar
爲什麼不試試一個小文件,看看你在達到目標時得到了什麼?然後輸入問題會更快。 – cmd
drahkar是我通過網絡發送幀,這是我分配的有效載荷大小,cmd我打算像其他Python新手像我可以受益於這些問題以及 –