Я довольно новичок в Python и использовал его для скрипта, чтобы открыть папку, фильтровать только файлы, а затем сортировать их по убыванию в зависимости от измененного времени. После этого сценарий запускается в первом файле журнала и ищет любую строку, содержащую слово «сбой», также сохраняя подсчет количества, которое он находит каждый раз. Затем он записывает эту информацию в отдельный файл.Python filter() и sort() слишком долгое время
Проблема, с которой я столкнулась, заключается в том, что этот сценарий занимает 20-30 минут для запуска. Папка содержит 5k + файлов, однако она не должна проходить через все из них. Скрипт хранит в отдельном файле первый файл, который он коснулся в последний раз, когда он запускался, и перестает обрабатывать, как только он снова ударяет файл.
Где я нахожу, что сценарий занимает слишком много времени, это использование встроенных методов filter()
и sort()
. Может ли кто-нибудь объяснить причины, почему это так медленно, и, возможно, предложить решение?
os.chdir(path)
files = filter(os.path.isfile, os.listdir(prod_path))
files.sort(key = os.path.getmtime, reverse = True)
for file in files:
if file == break_file:
break
f = open(path + file).readlines()
count = 0 #set count of errors to 0
dest.write('Upload: ' + file[:file.index(".")] + '\n') #filename, need to truncate off filetype
for line in f: #for each line in the the list of lines read from file
if line.find('Failure') != -1 and line != f[0]:
dest.write(line + '\n')
count += 1
dest.write('Number of Errors: ' + str(count) + '\n\n')
if dest.tell() == 0:
dest.write('No files to process!')
dest.close()
update_file = open(last_run_file, 'w') #last_run_file stores break_file
update_file.write(str(files[0]))
print "done"
Есть именовании для файлов этот каталог? – inspectorG4dget
Фильтр на 5000 строк не должен длиться так долго ... Я получил 26 мс для 5000 файлов с ipython timeit. Можете ли вы опубликовать несколько тестов? – user3467349
Эти файлы хранятся локально или находятся в сетевом ресурсе? Если это последнее, то может объяснить некоторую медлительность, но он все равно не ожидал, что это будет * медленно. – jme