Я новичок в Python и пишу сценарий, который получает единственный аргумент имени каталога и рекурсивно возвращает список всех файлов в указанном каталоге вместе с их MD5HA SH.
Скрипт использует многопроцессорность для большей эффективности.
Я бы хотел, чтобы результат выглядел так: «FileCounter, FileName, MD5HA SH ...»
Единственная часть, которая, похоже, не работает, - это счетчик - Несмотря на то, что я использую блокировку значений, как предлагается в некоторых сообщениях здесь, порядок все еще время от времени перемешивается (например, 1,2,3,6,4,6 вместо 1,2,3,4,5, 6).
Вот мой код:
#!/usr/bin/python
from multiprocessing import Pool,Value
import sys
import os
import hashlib
from time import sleep
counter = Value('i',0)
def md5gen (filePath):
global counter
with counter.get_lock():
counter.value += 1
print str(counter.value)+","+filePath+","+hashlib.md5(filePath).hexdigest()
# Check argument
if len(sys.argv) < 2:
print "No folder specified!"
quit()
folderName = sys.argv[1]
if not os.path.exists(folderName):
print "Not a valid folder!"
quit()
fileNames = []
for subdir,dirs,files in os.walk(folderName):
for file in files:
filePath = subdir + os.sep + file
fileNames.append(filePath)
p = Pool()
p.map(md5gen,fileNames)
Хотелось бы знать, что я здесь делаю не так. Спасибо!