有文本文件(約300米),並需要計數前N個頻率的單詞。第一步是從磁盤讀取它,現在我只需使用open.read().lower()
(不區分大小寫)是否有更有效的方法來處理IO部分?測試機有8核4G內存和Linux系統,python版本爲2.6。什麼是更有效的方式來讀取文本文件
1
A
回答
4
是的,過程行文件行的迭代器:
with open(filename) as inputfile:
for line in inputfile:
line = line.lower()
這將緩衝器的讀取性能,但不把儘可能多的壓力,你的記憶,避免了必須換。
接下來,使用collections.Counter()
爲您做頻率計數。它將以純Python代碼中最有效的方式處理計數併爲您選擇前N個單詞。
一個天真的方式來獲取單詞將是拆分空白的行;結合與發電機表達式可以給你在一行代碼中的所有字數:
from collections import Counter
with open(filename) as inputfile:
counts = Counter(word for line in inputfile for word in line.lower().split())
for word, frequency in counts.most_common(N):
print '{<40} {}'.format(word, frequency)
在Python 2.7版添加的Counter
類;對於2.6你可以使用this backport。
相關問題
- 1. 什麼是有效的方式來讀/寫優先隊列到文本文件?
- 2. 什麼是使用java讀取文件的最有效方式?
- 3. 更有效的方式來讀取文件和設置變量?
- 4. Android - 更高效的方法來讀取大文本文件
- 5. 向後讀取大文本文件的最有效方法是什麼?
- 6. 什麼是在java中讀取日誌文件的最有效方式?
- 7. C++什麼是從文本文件讀取的好方法?
- 8. 在Java中有更高效的方式來讀取文件中的數字嗎?
- 9. 什麼是更好的方式來刪除文件的條件
- 10. MyISAM/InnoDB從文件中刪除特定文本的有效方式是什麼?
- 11. 在C++中讀取文件的更好方法是什麼?
- 12. Scalish的方式來讀取文件,並在文件結束時做些什麼
- 13. 什麼是讀取WSDL文件的最佳方式?
- 14. 什麼是最有效的方式來讀取,然後覆蓋在PHP文件內容?
- 15. 什麼是從TCPServer讀取最有效的方式?
- 16. 什麼是用Java讀取大量數據的有效方式
- 17. Python最快的方式來讀取大文本文件(幾GB)
- 18. 什麼是「被動」的方式來讀取文件中的行由行
- 19. 以塊爲單位讀取超大文件的最有效方法是什麼?
- 20. 在C++中讀取文件最後一行的最有效方法是什麼?
- 21. 爲什麼DataFrameReader沒有「avro」方法來讀取avro文件?
- 22. Ruby檢查文件格式的有效方法是什麼?
- 23. 有什麼辦法來讀取該文件格式成Python
- 24. 什麼是一些更有效的方式來處理查詢?
- 25. (Mysql)什麼是最有效的方式來存儲表更改?
- 26. 高效的方式來讀取和剪切文件
- 27. 爲什麼JavaScript沒有更好的方式來包含文件?
- 28. 什麼是更簡單的方法來閱讀具有不同長度的文本文件的特定行?
- 29. 有效的方式來讀取不規則格式的文本文件,而不使用FOR循環R
- 30. 什麼是從C#文本文件中讀取大量整數(雙精度)的最有效方法?
你需要多快?你可以得到一個基線,這個基線能夠很好地將IO和詞分解爲時間wc -w m30text.txt→0.67s wallclock。 Martijn對同樣30M字(磁盤上34MB)文本文件的回答是:3.0s。無論您擁有多少核心,Python GIL都可能使您無法減少2.3s來填充Counter對象。 – msw
感謝python對於這類問題並不是一種合適的語言 – nzomkxia
這並不是所有的預期結論。對於文件可以被讀取和分析成文字的速度有一個較低的限制。如果你已經測量了一個正確的替代實現,沒有缺陷,並且性能更好,那麼向我們展示。在你測量它之前,它不存在,大多數人對Python內在函數性能的直覺通常是不正確的。 – msw