Python脚本需要很长时间才能在大文件上运行

时间:2017-06-26 16:28:49

标签: python

我正在编写一个python脚本来查找给定目录中的最新zip文件。我刚刚写完了它,但它花了很长时间才能输出大于30 GB的数据。它需要大约45分钟才能运行。有关如何提高脚本运行速度的任何提示?我在Windows 10上使用python 2.7。

import os, glob
from datetime import datetime

def findZip_Dir_list(cwd):
    file_dirs = []
    for (dirname, dirs, files) in os.walk(cwd):
        for filename in files:
            if filename.endswith('.zip'):
                file_dirs.append(dirname)

     return file_dirs

cwd = os.getcwd()

zip_dirs = findZip_Dir_list(cwd)

new_dirs = []
for i in zip_dirs:
    if i not in new_dirs:
        new_dirs.append(i)

latest_zip = []
for j in new_dirs:

    list_of_files = glob.glob(j+'/*.zip')

    latest_zip.append(max(list_of_files, key=os.path.getctime))

for k in latest_zip:
    print k

提前致谢。

3 个答案:

答案 0 :(得分:1)

最好和最简单的想法是使用PyPy

它是一个非常优化的替代python解释器。但是,如果您使用C语言编写的非标准库模块,您将无法直接使用PyPy。

答案 1 :(得分:1)

没有看到它正在处理的代码和数据,我只能猜测,但如果你只需要找到最新的文件,运行时间应该取决于目录中的文件数量,而不是它们的尺寸。要获取最后一次修改文件,您可以使用os.stat()作为示例。

编辑: 好的,现在我看到了,这里有一些可以让它更快的东西:

  • 在函数中,使file_dirs成为一个集合而不是列表,这样就可以避免重复元素
  • 如果您已经在目录中找到了一个zip文件,则可以在os.walk()
  • 中打破内部循环
  • 如果没有任何重复项,您可以直接使用该集,并且不需要创建new_dirs列表(检查列表中的元素是否为O(n)操作,这就是使代码变得如此缓慢的原因)

答案 2 :(得分:0)

python中使用的编译器不是紧固件(它不像机器代码那样对比例C),这就是为什么C,C ++等用于程序的原因需要更好的性能。不幸的是,如果不打赌速度更快/效果更好的电脑,我不认为你可以提高速度。

希望这能解释它:)