Использование Python и os.walk для поиска целей - PullRequest
0 голосов
/ 18 декабря 2018

В настоящее время я работаю над сценарием для просеивания файловых систем (как Linux, так и Windows) для поиска определенных строк в текстовых файлах.С помощью того, что у меня есть ниже, я могу выбрать, с чего начать, получить полные пути к файлам с нужными расширениями, но stringstofind, похоже, не выполняет итерацию правильно.В конце концов я сделаю это там, где я могу выбрать расширения файлов для поиска и ввести строки, которые я ищу, но сейчас мне просто нужно, чтобы это работало, чтобы я мог понять, что я делаю неправильно.Заранее спасибо!

пока у меня есть:

import os

userinput = input("What directory to search?")
stringstofind = ["String1", "String2", "String3"]
for roots,subdir, files in os.walk(userinput):
   for fname in files:
      #I know this if line is ugly, but like with stringstofind I had a hard 
      #time getting it to iterate through right.
      if ".txt" in fname or ".rtf" in fname or ".doc" in fname:
         filepath = os.path.join(roots,fname)
         with open(filepath, 'r') as f:
            for lines in f:
               if stringstofind in lines:
                  print("found target")

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

вместо

if stringstofind in lines:
    print("found target")

использование:

for string in stringstofind:
    if string in lines:
        print("found target")
0 голосов
/ 18 декабря 2018

Я думаю, что это всего лишь несоответствие типов:

  • каждая переменная lines, созданная в цикле for lines in f:, на самом деле является строкой
  • stringstofind определяется каксписок

Вы пытаетесь выполнить if stringstofind in lines: проверку, находится ли список строк внутри строки.


Что вы, вероятно, имели в виду, чтобы проверить, если какой-либо изстроки, определенные в списке stringstofind, являются частью строки.Для этого вы можете использовать any():

for line in f:
   if any(item in line for item in stringstofind):
      print("found target")
...