例如,我在一個文件中有2000行,並且我想一次讀500行,並在讀取另外500行之前對這500行進行操作。我想知道是否有人會爲我學習一些快速代碼。謝謝!Python 2.7:如何從文件一次只讀幾行?
回答
您可以使用生成器將這些行組合在一起,並以便於在簡單for循環中使用的方式生成它們。這可能讓你開始:
def chunks_of(iterable, chunk_size=500):
out = []
for item in iterable:
out.append(item)
if len(out) >= chunk_size:
yield out
out = []
if out:
yield out
然後,您可以使用此類似:
for chunk_of_lines in chunks_of(file('/path/to/file'), chunk_size=500):
# chunk_of_lines is 500 or fewer lines from the file
(爲什麼「500或更少」因爲最後一個塊可能不是500行,如果行中的數字?該文件不是500的倍數。)
編輯:總是先檢查文檔。下面是從the itertools docs
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
配方這就造成對迭代ñ迭代器列表(在這種情況下,文件對象) - 因爲它們是相同的底層對象的所有迭代器,當一個人的進步,其餘的都會提前 - 然後拉下結果。 izip_longest
的工作方式與izip
類似,但將其結果與fillvalue
一起填充,而不是像我的chunks_of
函數那樣簡單地省略它們。
我認爲對於絕對是初學者的人來說,發電機解決方案太複雜了。如果他們不能寫一個簡單的循環,他們不會理解生成器和yield語句。 –
@eryksun d'oh!謝謝,好點 - 現在對我來說實際上更有意義。 – dcrosta
您也可以使用itertools.islice
同時讀取500線:
lines = itertools.islice(file_obj, 500)
糾正我,但我認爲這個很基本的示例將工作太:
linesToProceed = 500
with open(filename, 'r') as f:
lines = []
for i,line in enumerate(f):
if (i + 1) % linesToProceed:
# do something with lines in lines
lines = []
else:
lines.append(line)
- 1. 讀幾行從文件一次
- 2. 從文本文件中讀取一次4行或幾行
- 3. Python - 一次從文件讀取1000行
- 4. 閱讀文件只一次
- 5. 只讀一次文件的下一行
- 6. PHP,如何從文件中只讀取幾行
- 7. Python 2.7 - 從文件中讀取和讀取一個列表
- 8. 如何從文本文件python 2.7
- 9. 只讀文件的前幾行
- 10. 從文本文件只讀第一行
- 11. 如何從python文件中一次讀取一個字符?
- 12. PYTHON從參考文件幾次打印
- 13. python - 從文件中讀取幾列
- 14. 一次只讀一行
- 15. 一次從文件中讀取兩行
- 16. 如何從文本文件中讀取同一行兩次?
- 17. 只運行一次js文件一次
- 18. 如何在Python 2.7中一次解碼unicode一行?
- 19. 如何閱讀python中的skippinf幾行之後的json文件?
- 20. os.chmod()是Python 2.7只適用於文件?
- 21. 從python的文件中讀取一行
- 22. 麻煩從另一個python(2.7)文件打開Qt4 python文件
- 23. Python 2.7版文件讀取錯誤
- 24. 如何使用OleDbDataAdapter從Excel文件中只讀取第一行?
- 25. 如何從文件中只讀取一行
- 26. 如何只從文件讀取一行(它的頭)?
- 27. 如何用python 2.7創建文件txt文件csv 2.7
- 28. 如何只讀取CSV文件每一行的第一列
- 29. 一次讀取文本文件一行
- 30. 一次只讀一個「行」的製表符分隔文件
向我們展示你的代碼現在,我們將從那裏開始。 –