Я пытаюсь понять, как я могу искать три различных типа строк - PullRequest
0 голосов
/ 27 апреля 2011

Часть кода ниже берет строку (userstring) и ищет все файлы .txt и .log в данном каталоге на предмет соответствия.Однако я добавил две другие переменные (userStrHEX & userStrASCII), где я преобразую строку в hex и ascii для поиска всех файлов .txt и .log по этим форматам строк.В настоящее время эти переменные не используются.Я думаю добавить эти переменные в список и, возможно, использовать цикл while для итерации этого раздела кода до количества элементов в списке.Кроме того, я думаю, что мне нужно будет назначать каждый элемент в списке статической переменной каждый раз, когда циклы повторяются ... Я застрял!Я был бы признателен за все понимание.Спасибо!

  def do_search(self, line):
          print "  Directory to be searched: c:\Python27 "
          directory = os.path.join("c:\\","Python27")
          userstring = raw_input("Enter a string name to search: ")
          userStrHEX = userstring.encode('hex')
          userStrASCII = ' '.join(str(ord(char)) for char in userstring)
          for root,dirname, files in os.walk(directory):
             for file in files:
                 if file.endswith(".log") or file.endswith(".txt"):
                    f=open(os.path.join(root, file))
                    for line in f.readlines():
                       if userstring in line:
                          print "file: " + os.path.join(root,file)           
                          break
                    else:
                       print "String NOT Found!"
                       break
                    f.close()

1 Ответ

3 голосов
/ 27 апреля 2011

Лучшим способом, вероятно, является создание регулярного выражения, которое соответствует всем трем строкам.Взгляните на документацию для повторного модуля.В двух словах:

regex = re.compile( "(%s|%s|%s)" % ( re.escape( userstring ), re.escape( userStrHEX ), re.escape( userStrASCII ) )

Затем вместо "userstring in line", проверьте regex.search (line)

...