Как я могу получить значение в области цикла и использовать его вне цикла в Python - PullRequest
2 голосов
/ 24 августа 2011

Может ли кто-нибудь помочь мне подумать над решением этой проблемы.В приведенном ниже коде я беру список и открываю все файлы .log и .txt, чтобы найти в них определенную строку.В самом внутреннем цикле for есть оператор if и else, который определяет, была ли найдена строка или нет.Я хочу посчитать количество файлов, в которых была найдена строка ... и каким-то образом передать это третьему (последнему) для цикла и отображения ... (например, Files Matched: 4).Я все еще изучаю Python, поэтому я не знаю всех различных конструкций, которые могли бы ускорить это начинание.Я уверен, что это прямая проблема, но я исчерпал все, что я знаю, чтобы сделать, кроме метода проб и ошибок.Спасибо!

...

for afile in filelist:
    (head, filename) = os.path.split(afile)
    if afile.endswith(".log") or afile.endswith(".txt"):
        f=ftp.open(afile, 'r')
        for i, line in enumerate(f.readlines()):
            result = regex.search(line)
            if result:
                ln = str(i)
                pathname = os.path.join(afile)
                template = "\nLine: {0}\nFile: {1}\nString Type: {2}\n\n"
                output = template.format(ln, pathname, result.group())
                hold = output
                print output
                ftp.get(afile, 'c:\\Extracted\\' + filename)
                temp.write(output)
                break
        else:
            print "String Not Found in: " + os.path.join(afile)
            temp.write("\nString Not Found: " + os.path.join(afile))

        f.close()
for fnum in filelist:
    print "\nFiles Searched: ", len(filelist)
    print "Files Matched: ", count
    num = len(filelist)

    temp.write("\n\nFiles Searched: " + '%s\n' % (num))
    temp.write("Files Matched: ") # here is where I want to show the number of files matched
    break

1 Ответ

4 голосов
/ 24 августа 2011

Как насчет этого:

count = 0
for afile in filelist:
    (head, filename) = os.path.split(afile)
    if afile.endswith(".log") or afile.endswith(".txt"):
        f=ftp.open(afile, 'r')
        for i, line in enumerate(f.readlines()):
            result = regex.search(line)
            if result:
                count += 1
                ln = str(i)
                pathname = os.path.join(afile)
                template = "\nLine: {0}\nFile: {1}\nString Type: {2}\n\n"
                output = template.format(ln, pathname, result.group())
                hold = output
                print output
                ftp.get(afile, 'c:\\Extracted\\' + filename)
                temp.write(output)
                break
        else:
            print "String Not Found in: " + os.path.join(afile)
            temp.write("\nString Not Found: " + os.path.join(afile))

        f.close()
for fnum in filelist:
    print "\nFiles Searched: ", len(filelist)
    print "Files Matched: ", count
    num = len(filelist)

    temp.write("\n\nFiles Searched: " + '%s\n' % (num))
    temp.write("Files Matched: "+str(count)) # here is where I want to show the number of files matched
    break

отсчет начинается с 0 и увеличивается для каждого файла, для которого есть соответствие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...