Python 3中的open()应该是完全用Python实现的,速度和Python 2.5+ 中的io.open()相似,实现应该是相同的。
我实测远比Python 2的open()慢很多,我的程序有大量io操作,有没有办法提高效率?
大家有没有类似的问题?
我实测远比Python 2的open()慢很多,我的程序有大量io操作,有没有办法提高效率?
大家有没有类似的问题?
1
ruoyu0088 Nov 9, 2014
把你的测试代码和开发环境贴出来看看。什么系统,Python 3.x, python 2.x?
|
2
snail1988 OP OSX 10.10/10.9.5 / Ubuntn 14.04 LTS
Python 3.4.2/3.4 2.7.6/2.7.8 代码片段 def searchCrash(file): try: with open(file, 'r') as f: global count for line in f: if 'StackTrace' in line: count = count + 1 except Exception as e: # raise e pass finally: pass def traverseFile(rootDir): for lists in os.listdir(rootDir): path = os.path.join(rootDir, lists) if os.path.isfile(path): searchCrash(path) 我在一个2000个文件 总计4GB的目录上调用 traverseFile方法 |
4
imn1 Nov 9, 2014
请给出2.x和3.x的cProfile对比
1.如果每文件只有2~3M,我是不会逐行搜索,而是直接全文件搜索 2.py而文件路径仅仅是个字符串,用字符串的join要比 os.path.join 快 3.open指定encoding参数比较好,如果不纯粹是ASCII字符,你这段代码应该不少except 4.searchCrash没有返回值,却用了global,不如把count返回,避免使用global |
5
ruoyu0088 Nov 9, 2014
我记得Python3用"r"模式打开文件的话读入的是Unicode,有一个UTF8转Unicode的过程。
|
6
snail1988 OP |
7
lxyu Nov 9, 2014 via iPhone
这种文件搜索为何不用 grep ack 这种工具呢?
|
9
snail1988 OP 看来Py3的IO确实是因为编码和处理变慢了,下面这篇文章不错
http://dabeaz.blogspot.com/2010/01/reexamining-python-3-text-io.html |