有文本文件(约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