Предложение else
для цикла for
выполняется, если цикл выходит из-за того, что итерация, по которой он повторяется, исчерпана, а не из-за оператора break
. Поскольку в вашем цикле нет break
, предложение else
всегда будет выполняться.
Вот попытка рефакторинга вашего кода. Он использует функцию генератора для генерации списка имен файлов и модуль fileinput
для открытия и закрытия файлов. Ваша треска никогда явно не закрывает какой-либо файл из-за break
непосредственно перед f.close()
.
def walk_dir(directory, extensions=""):
for path, dirs, files in os.walk(directory):
for name in files:
if name.endswith(extensions):
yield os.path.join(path, name)
whitespace = re.compile(r'\s+')
for line in fileinput.input(walk_dir(directory, (".log", ".txt"))):
result = regex.search(whitespace.sub('', line))
if result:
template = "\nLine: {0}\nFile: {1}\nString Type: {2}\n\n"
output = template.format(fileinput.filelineno(),
fileinput.filename(),
result.group())
print output
temp.write(output)