тесты: есть ли у python более быстрый способ обхода сетевой папки?

Мне нужно пройти через папку с примерно десятью тысячами файлов. Мой старый VBScript очень медленно обрабатывает это. Так как я'С тех пор, как я начал использовать Ruby и Python, я сделал эталон между тремя языками сценариев, чтобы определить, какие из них лучше всего подходят для этой работы.

Результаты тестов, приведенных ниже, в подмножестве 4500 файлов в общей сети

Python: 106 seconds
Ruby: 5 seconds
Vbscript: 124 seconds

То, что Vbscript будет самым медленным, неудивительно, но я могуНе могу объяснить разницу между Ruby и Python. Мой тест на Python не является оптимальным? Есть ли более быстрый способ сделать это в Python?

Тест для thumbs.db только для теста, в действительности есть больше тестов, чтобы сделать.

Мне нужно что-то, что проверяет каждый файл на пути и нене производит слишком много выходного сигнала, чтобы не нарушать синхронизацию. Результаты немного отличаются друг от друга, но не сильно.

#python2.7.0
import os

def recurse(path):
  for (path, dirs, files) in os.walk(path):
    for file in files:
      if file.lower() == "thumbs.db":
        print (path+'/'+file)

if __name__ == '__main__':
  import timeit
  path = '//server/share/folder/'
  print(timeit.timeit('recurse("'+path+'")', setup="from __main__ import recurse", number=1))
'vbscript5.7
set oFso = CreateObject("Scripting.FileSystemObject")
const path = "\\server\share\folder"
start = Timer
myLCfilename="thumbs.db"

sub recurse(folder)
  for each file in folder.Files
    if lCase(file.name) = myLCfilename then
      wscript.echo file
    end if
  next
  for each subfolder in folder.SubFolders
    call Recurse(subfolder)
  next
end Sub

set folder = oFso.getFolder(path)
recurse(folder)
wscript.echo Timer-start
#ruby1.9.3
require 'benchmark'

def recursive(path, bench)
  bench.report(path) do
    Dir["#{path}/**/**"].each{|file| puts file if File.basename(file).downcase == "thumbs.db"}
  end
end

path = '//server/share/folder/'
Benchmark.bm {|bench| recursive(path, bench)}

РЕДАКТИРОВАТЬ: так как я подозревал, что печать привела к задержке, я протестировал сценарии с печатью всех 4500 файлов, а также без печати, разница остается: R: 5 P: 107 в первом случае и R: 4,5 P: 107 в последнем

РЕДАКТИРОВАТЬ 2: на основе ответов и комментариев здесь версия Python, которая в некоторых случаях может работать быстрее, пропуская папки

import os

def recurse(path):
  for (path, dirs, files) in os.walk(path):
    for file in files:
      if file.lower() == "thumbs.db":
        print (path+'/'+file)

def recurse2(path):
    for (path, dirs, files) in os.walk(path):
        for dir in dirs:
            if dir in ('comics'):
                dirs.remove(dir)
        for file in files:
            if file.lower() == "thumbs.db":
                print (path+'/'+file)


if __name__ == '__main__':
  import timeit
  path = 'f:/'
  print(timeit.timeit('recurse("'+path+'")', setup="from __main__ import recurse", number=1)) 
#6.20102692
  print(timeit.timeit('recurse2("'+path+'")', setup="from __main__ import recurse2", number=1)) 
#2.73848228
#ruby 5.7

Ответы на вопрос(2)

Ваш ответ на вопрос